当前位置: 首页 > news >正文

有关 string 类的练习(下)


目录

一、反转字符串 II

二、反转字符串中的单词 III

三、找出字符串中第一个只出现一次的字符

四、字符串相乘

五、把字符串转换成整数



一、反转字符串 II

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例 1:

输入:s = "abcdefg", k = 2

输出:"bacdfeg"

示例 2:

输入:s = "abcd", k = 2

输出:"bacd"

提示:

  • 1 <= s.length <= 10^4
  • s 仅由小写英文组成
  • 1 <= k <= 10^4

代码实现: 

class Solution {
public:string reverseStr(string s, int k) {size_t pos = 0;  // pos 为每次计数的起点while (pos < s.size()){if (pos + k <= s.size())  // 剩余字符大于等于 kreverse(s.begin() + pos, s.begin() + pos + k);else  // 剩余字符小于 kreverse(s.begin() + pos, s.end());pos += 2 * k;}return s;}
};


二、反转字符串中的单词 III

给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 1:

输入:s = "Let's take LeetCode contest"

输出:"s'teL ekat edoCteeL tsetnoc"

示例 2:

输入: s = "God Ding"

输出:"doG gniD"

提示:

  • 1 <= s.length <= 5 * 10^4
  • s 包含可打印的 ASCII 字符。
  • s 不包含任何开头或结尾空格。
  • s 里 至少 有一个词。
  • s 中的所有单词都用一个空格隔开。

代码实现: 

class Solution {
public:string reverseWords(string s) {size_t pos = 0;  // pos 为每个待反转的单词的起点size_t found = s.find(' ', pos);  // found 为每个待反转的单词的终点的下一个位置while (found != string::npos){reverse(s.begin() + pos, s.begin() + found);pos = found + 1;found = s.find(' ', pos);}reverse(s.begin() + pos, s.end());  // 反转最后一个单词return s;}
};


三、找出字符串中第一个只出现一次的字符

描述:

找出字符串中第一个只出现一次的字符

数据范围:

输入的字符串长度满足 1≤ n ≤1000 

输入描述:

输入一个非空字符串

输出描述:

输出第一个只出现一次的字符,如果不存在输出 -1

示例 1:

输入:asdfasdfo

输出:o

代码实现: 

#include <iostream>
using namespace std;
​
int main() 
{string s;cin >> s;// 统计 s 中的每个字符出现的次数int count[256] = { 0 };for (size_t i = 0; i < s.size(); ++i){count[s[i]] += 1;}
​// 找出字符串中第一个只出现一次的字符bool flag = false;  // 假设字符串中不存在只出现一次的字符for (size_t i = 0; i < s.size(); ++i){if (count[s[i]] == 1){flag = true;cout << s[i] << endl;break;}}if (flag == false)cout << -1 <<endl;return 0;
}


四、字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例 1:

输入: num1 = "2", num2 = "3"

输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"

输出: "56088"

提示:

  • 1 <= num1.length, num2.length <= 200
  • num1 和 num2 只能由数字组成。
  • num1 和 num2 都不包含任何前导零,除了数字0本身。

代码实现: 

class Solution {
public:// 字符串相加string add(string num1, string num2) {string ans;int end1 = num1.size() - 1, end2 = num2.size() - 1;size_t carry = 0;  // 进位while (end1 >= 0 || end2 >= 0 || carry > 0){size_t val1 = end1 >= 0 ? (num1[end1--] - '0') : 0;size_t val2 = end2 >= 0 ? (num2[end2--] - '0') : 0;size_t sum = val1 + val2 + carry;
​ans.insert(ans.begin(), sum % 10 + '0');  // 头插carry = sum / 10;}return ans;}
​// 字符串相乘string multiply(string num1, string num2) {if (num1 == "0" || num2 == "0")  // 特殊情况{return string("0");}// 思路:// 123 * 456 // = 123 * (400 + 50 + 6) // = [(123 * 4) * 100] + [(123 * 5) * 10] + (123 * 6)// 所以首先考虑计算出 123 * 6/5/4,然后在其后面添加适当的 '0',最后再将所有的积相加string ans;int end2 = num2.size() - 1;size_t count = 0;  // 需要添加的 '0' 的数量while (end2 >= 0){size_t val2 = num2[end2--] - '0';string product;size_t carry = 0;int end1 = num1.size() - 1;while (end1 >= 0 || carry > 0){size_t val1 = end1 >= 0 ? (num1[end1--] - '0') : 0;size_t sum = val1 * val2 + carry;
​product += sum % 10 + '0';carry = sum / 10;}reverse(product.begin(), product.end());product.append(count++, '0');ans = add(ans, product);}return ans;}
};


五、把字符串转换成整数

描述:

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0

数据范围:

字符串长度满足 0≤ n ≤100 
进阶:

空间复杂度 O(1)  ,时间复杂度 O(n) 

注意:

① 字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0

② 字符串中可能出现 +/- 且仅可能出现在字符串首位。

输入描述:

输入一个字符串,包括数字字母符号,可以为空

返回值描述:

如果是合法的数值表达则返回该数字,否则返回0

示例 1:

输入:"+2147483647"

返回值:2147483647

示例 2:

输入:"1a33"

返回值:0

代码实现:

class Solution {
public:int StrToInt(string str) {// 如果是空字符串,则直接返回 0size_t sz = str.size();if (sz == 0)return 0;// 确定正负号size_t i = 0; int sign = 1;  // 默认为正号if (str[0] == '+'){++i;}else if (str[0] == '-'){++i;sign = -1;}
​// 确定绝对值int res = 0;while (i < sz){if (str[i] >= '0' && str[i] <= '9')res = res * 10 + (str[i] - '0');elsereturn 0;++i;}return sign * res;}
};

相关文章:

有关 string 类的练习(下)

目录 一、反转字符串 II 二、反转字符串中的单词 III 三、找出字符串中第一个只出现一次的字符 四、字符串相乘 五、把字符串转换成整数 一、反转字符串 II 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xff0c;就反转…...

XuperChain搭建+报错+注意事项

安装依赖 golang 这里安装的是15-17版本 wget -c https://dl.google.com/go/go1.15.2.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local 添加环境变量 这个可以通过添加下面的行到/etc/profile文件(系统范围内安装)或者$HOME/.profile文件(当前用户安装 vim /etc…...

【伏羲八卦图】(PythonMatlab实现)

目录 1 与达尔文对话 2 与老子对话 2.1 Python实现 2.2 Matlab实现 1 与达尔文对话 140年前&#xff0c;1858年7月1日&#xff0c;达尔文在英伦岛发表了自己有关自然选择的杰出论文。他提出&#xff0c;生物的发展规律是物竞天择。经过物竞&#xff0c;自然界选择并存留最具…...

ruoyi数据权限学习

思路 用户关联了角色&#xff08;用户可以关联多个角色&#xff09;&#xff0c;给角色设置数据权限分类&#xff0c;数据权限分类有如下5种&#xff1a; 全部数据权限 - DATA_SCOPE_ALL自定数据权限 - DATA_SCOPE_CUSTOM部门数据权限 - DATA_SCOPE_DEPT部门及以下数据权限 -…...

WPF中实现动态导航

主页面 <mah:MetroWindowx:Class"Kx.View.MyMainView"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/bl…...

day16 | 104.二叉树的最大深度、111.二叉树的最小深度、 222.完全二叉树的节点个数

目录&#xff1a; 链接 题目链接&#xff1a; https://leetcode.cn/problems/maximum-depth-of-binary-tree/ https://leetcode.cn/problems/maximum-depth-of-n-ary-tree/ https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ 解题及思路学习 104…...

Spring Boot + Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二

接着上一次Spring Boot Vue3 前后端分离 实战 wiki 知识库系统&#xff1c;七&#xff1e;--分类管理功能开发的分类功能继续完善。 分类编辑功能优化&#xff1a; 概述&#xff1a; 现在分类编辑时的界面长这样&#xff1a; 很明显目前的父分类的展现形式不太人性&#xf…...

Python入门(十八)类(一)

类&#xff08;一&#xff09; 1.面向对象概述2.创建和使用类2.1 创建dog类2.2 根据类创建实例2.3 创建多个实例 1.面向对象概述 面向对象编程是最有效的软件编写方法之一。在面向对象编程中&#xff0c;你编写表示现实世界中的事物和情景的类&#xff0c;并基于这些类来创建对…...

c# 从零到精通-定义一个结构

c# 从零到精通-定义一个结构 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test01 { class Program { public struct Rect//定义一个矩形结构 { public double width;//矩形的宽 public double height;//矩形的高 /// …...

检信ALLEMOTION非接触式心理情绪测评系统

1 名称&#xff1a;检信ALLEMOTION多维度心理情绪测评系统 2 用途&#xff1a;用于群体性人群心理情绪早期筛查&#xff0c;以及个人心理障碍辅助诊断,同时传统心理量表诞生已经100多年历史&#xff0c;在人工智能及大数据推动下&#xff0c;必然推动心理健康行业的产业变革与…...

20道嵌入式经典面试题(附答案)

1.嵌入式系统中经常要用到无限循环&#xff0c;如何用C编写死循环 答&#xff1a;while(1){} 或者 for(;;) 2.程序的局部变量存在于哪里&#xff0c;全局变量存在于哪里&#xff0c;动态申请数据存在于哪里。 答&#xff1a;程序的局部变量存在于栈区&#xff1b;全局变量存在…...

python学习-代码调试器

目录 为什么学习调试器Pycharm Debugger示例所用代码布局调试工具栏 Debug Bar程序控制工具栏 pdb查看源代码 l list查看当前函数源代码 ll longlist打印变量 p查看调用栈w where向上移动当前帧 u up向上移动当前帧 d down运行当前行代码,在第一个可以停止的位置停下 s step继续…...

第十一章 综合推理

第十一章 综合推理 第一节 综合推理-排序 题-综合推理-分类1-排序 甲、乙、丙、丁四人的国籍分别为英国、俄国、法国、日本。乙比甲高&#xff0c;丙更矮&#xff1b;英国人比俄国人高&#xff0c;法国人最高&#xff1b;日本人比丁高。 这四个人的国籍是&#xff1a; A.甲…...

嵌入式开发之设置寄存器中指定位

0 Preface/Foreword 嵌入式开发&#xff0c;位操作是常用的运算&#xff0c;读写对应寄存器指定位从而设置不同的功能。 1 设置寄存器中的任意位 1.1 清零 举例&#xff0c;假设一个寄存器名字为FUNCCON&#xff0c;地址为0x00008000,该寄存器长度为4个byte。 #define FUNC…...

第十章 数学相关

第十章 数学相关 第一节 集合 真题&#xff08;2010-53&#xff09;-数学相关-集合-画饼集能力-朴素逻辑 53.参加某国际学术研讨会的 60 名学者中&#xff0c;亚裔学者 31 人&#xff0c;博士 33 人&#xff0c;非亚裔学者中无博士学位的 4 人。根据上述陈述&#xff0c;参…...

数据结构——串(字符串)

文章目录 **一 串的定义和实现****1 定义****2 串的存储结构****2.1 定长顺序存储表示****2.2 堆分配存储表示****2.3 块链存储表示** **3 串的基本操作** **二 串的模式匹配****1 简单的模式匹配算法****2 串的模式匹配算法——KMP算法****2.1 字符串的前缀&#xff0c;后缀和…...

Seata服务端的启动过程 学习记录

1.ServerRunner ServerRunner类实现了CommandLineRunner与DisposableBean接口&#xff0c;将会在Spring容器启动和关闭的时间&#xff0c;分别执行 run 和 destory 方法。 而seata服务端的启动过程&#xff0c;都藏在run方法中 2.整体流程 io.seata.server.Server#start pu…...

Log4J

引言 为什么要用日志? --> 方便调试代码 什么时候用?什么时候不用? ​ 出错调试代码时候用 生产环境下就不需要,就需要删除 怎么用? --> 输出语句 一、Log4J 1.1 介绍 ​ log4j是Apache的一个开放源代码的项目&#xff0c;通过使用log4j&#xff0c;我们可以控…...

【零基础学机器学习 5】机器学习中的分类:什么是分类以及分类模型

&#x1f468;‍&#x1f4bb; 作者简介&#xff1a;程序员半夏 , 一名全栈程序员&#xff0c;擅长使用各种编程语言和框架&#xff0c;如JavaScript、React、Node.js、Java、Python、Django、MySQL等.专注于大前端与后端的硬核干货分享,同时是一个随缘更新的UP主. 你可以在各个…...

目标检测算法:Faster-RCNN论文解读

目标检测算法&#xff1a;Faster-RCNN论文解读 前言 ​ 其实网上已经有很多很好的解读各种论文的文章了&#xff0c;但是我决定自己也写一写&#xff0c;当然&#xff0c;我的主要目的就是帮助自己梳理、深入理解论文&#xff0c;因为写文章&#xff0c;你必须把你所写的东西表…...

零基础玩转CTFShow Web1-7:手把手教你用Burp Suite和蚁剑拿flag

零基础玩转CTFShow Web1-7&#xff1a;从工具配置到实战渗透全指南 第一次接触CTF比赛时&#xff0c;看着其他选手在终端里敲出神秘代码就能拿到flag&#xff0c;总觉得这是黑客才能掌握的"黑魔法"。直到自己动手尝试才发现&#xff0c;只要掌握正确的工具和方法&…...

RWKV7-1.5B-g1a保姆级部署教程:离线加载+免外网依赖,中小企业AI落地首选

RWKV7-1.5B-g1a保姆级部署教程&#xff1a;离线加载免外网依赖&#xff0c;中小企业AI落地首选 1. 模型简介 rwkv7-1.5B-g1a 是基于新一代 RWKV-7 架构的多语言文本生成模型&#xff0c;专为中小企业AI落地场景优化设计。这个1.5B参数的轻量级模型在保持高质量生成能力的同时…...

Sigma-Delta ADC中的Sinc3滤波器:资源优化与面积权衡实战分析

Sigma-Delta ADC中的Sinc3滤波器&#xff1a;资源优化与面积权衡实战分析 在物联网芯片设计中&#xff0c;面积和功耗往往是工程师们最关心的两个指标。当我们需要为一个22位精度的Sigma-Delta ADC集成Sinc3滤波器时&#xff0c;如何在保证性能的前提下最大限度地优化硬件资源&…...

SWF逆向工程工作流优化:JPEXS Free Flash Decompiler效率提升技巧

SWF逆向工程工作流优化&#xff1a;JPEXS Free Flash Decompiler效率提升技巧 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler JPEXS Free Flash Decompiler&#xff08;简称FFDec&#…...

Insanely Fast Whisper终身学习模型:持续优化的语音识别系统设计

Insanely Fast Whisper终身学习模型&#xff1a;持续优化的语音识别系统设计 【免费下载链接】insanely-fast-whisper 项目地址: https://gitcode.com/GitHub_Trending/in/insanely-fast-whisper 你是否还在为语音识别速度慢、准确率低而烦恼&#xff1f;是否希望拥有一…...

Open Images数据集完全指南:从零开始构建计算机视觉应用

Open Images数据集完全指南&#xff1a;从零开始构建计算机视觉应用 【免费下载链接】dataset The Open Images dataset 项目地址: https://gitcode.com/gh_mirrors/dat/dataset Open Images数据集是谷歌推出的一个大规模计算机视觉数据集&#xff0c;包含约900万张图像…...

3分钟快速修复机械键盘连击问题:终极解决方案指南

3分钟快速修复机械键盘连击问题&#xff1a;终极解决方案指南 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker KeyboardChatterBlocker是…...

告别重复造轮子,用快马AI一键生成高复用登录组件提升效率

在开发官网登录入口时&#xff0c;我们常常需要重复处理用户认证、表单验证、状态管理等基础逻辑。这些工作虽然不复杂&#xff0c;但每次从零开始确实会消耗不少时间。最近我发现用InsCode(快马)平台可以快速生成高质量的登录组件&#xff0c;大大提升了开发效率。 组件功能设…...

OpenClaw任务监控:GLM-4.7-Flash执行状态可视化方案

OpenClaw任务监控&#xff1a;GLM-4.7-Flash执行状态可视化方案 1. 为什么需要任务监控&#xff1f; 去年冬天的一个深夜&#xff0c;我被手机警报惊醒——OpenClaw正在执行的周报生成任务已经连续失败了三次。打开电脑检查日志时才发现&#xff0c;原来是本地部署的GLM-4.7-…...

基于2026校招数据分析:拥有这几张AI证书的学生,起薪普遍高30%

2026年校招季已近尾声&#xff0c;随着DeepSeek等大模型技术的持续突破与“人工智能”向千行百业的深度渗透&#xff0c;AI人才市场的竞争呈现白热化态势。前程无忧51job发布的《2026届校招市场AI人才需求报告》显示&#xff0c;AI相关岗位校招薪酬中位数已突破2万元/月&#x…...