[C++初阶]string的几道oj题

1.LCR 192. 把字符串转换成整数 (atoi)

这题难度不大,我这里采取遍历跳过空格的方式,我先展示出我的代码,然后慢慢讲解:

class Solution {
public:int myAtoi(string str) {if (str.empty()) return 0;int length=str.size();int i=0;int symbol=1;int sum=0;while(i<length && str[i]==' '){++i;}if(i<length && str[i]=='+'||str[i]=='-'){if(str[i]=='-')symbol=-1;++i;} while(i<length && isdigit(str[i])){int a=str[i]-'0';if(sum>(INT_MAX-a)/10){if(symbol==1)return INT_MAX;elsereturn INT_MIN;}sum=sum*10+a;++i;}return sum*symbol;}
};

首先我们先排除特殊情况,判断这个string是否为空

下面我们对我们所需要的一些数据进行初始化

length是string的长度

i是遍历的位置

symbol是正负号,1为正号,-1为负号。

sum为最后遍历出的结果计算的和。

做这道题我们首先要理清楚思路,

有以下四种情况需要考虑:

  1. 首部空格: 忽略之即可;
  2. 符号位: 三种情况,即 ''+++'' , ''−-−'' , ''无符号" ;用一个变量保存符号位,返回前判断正负;
  3. 非数字字符: 遇到首个非数字的字符时,直接返回;
  4. 数字字符:

  1.         字符转数字: “此数字的 ASCII 码” 与 '0' 相减即可;
  2.         数字拼接: 若从左向右遍历数字,设当前位字符为 c ,当前位数字为 x ,数字结果为 sum ,则数字拼接公式为:

 x=c-'0'

sum=sum*10+x。

用例的示意图(可能不大准确):

我们先遍历排除开头空格,然后记录符号

接下来我们要记录数字,这里我采用一个自带的函数

判断此时读入的是否为数字,是数字则读入

注意:我们要判断是否超过了int的最大值或最小值,而且要保证自己的int类型不超过int的最大值或最小值

因此,这里我把等式左边的操作移到了等式右边。

如果超出了最值,我们接下来通过symbol的值来判断是最大值还是最小值,然后返回相应结果。

如果读完了所有的数,都没有超出最值,那么我们直接调用上面我们写的公式返回

2.415. 字符串相加

这题明显比上面一道题简单,老规矩,先上代码

class Solution {
public:string addStrings(string num1, string num2) {int i = num1.length() - 1, j = num2.length() - 1, add = 0;string ans = "";while (i >= 0 || j >= 0 || add != 0) {int x = i >= 0 ? num1[i] - '0' : 0;int y = j >= 0 ? num2[j] - '0' : 0;int result = x + y + add;ans.push_back('0' + result % 10);add = result / 10;i -= 1;j -= 1;}reverse(ans.begin(), ans.end());return ans;}
};

首先我们先求出最后一位的下标(string中数的最后一位就是下标最后一位)

同时我们一块定义好我们的进位值,因为我们进行的是10进制计算。大于10要进1,因为一开始,没有进位,所以add=0

我们再创建一个新的string用来存放计算结果:

我们先把string是的数从字符类型转换成数字类型,然后计算(记得加上进位值)

然后我们把它尾插入我们创建的新的string中(这里我选择采用尾插,但也可以用头插(但是头插的时间复杂度更高,因为每次头插都要移动位置))

然后我们调整下标和进位值

最后我们调用reverse函数,翻转一下顺序

3.387. 字符串中的第一个唯一字符

这题难度也不大,我们之后可以用哈希表来解决,这里我选择采用计数数组来解决这个问题

class Solution {
public:int firstUniqChar(string s) {int count[26] = {0};for(auto ch : s){count[ch-'a']++;}for(int i = 0; i < s.size(); i++){if(count[s[i]-'a'] == 1){return i;}}return -1;}
};

把字符串遍历使对应数组++,然后再次遍历数组输出唯一字符.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

春游江淮 请来池州|一起看看石台这条“天路”有多美

自驾石台天路 石台天路位于安徽省石台县,西起杜村蓬莱仙洞,东起七都镇,全程约65公里,其中核心路段海拔均在650米以上,最高处海拔坐标位置901米,自驾其中,一路穿越山乡秘境,丛林、山脉、古村、古桥、流水、人家……扑面而来。 沿着蜿蜒的山路前行,一路上的风景如诗如画,青山如黛…

IT项目管理 选择/判断 【太原理工大学】

第一章、IT项目管理 判断题 1、搬家属于项目。&#xff08; 对 &#xff09; 2、项目是为了创造一个唯一的产品或提供一个唯一的服务而进行的永久性的努力。&#xff08; 错 &#xff09; 3、项目具有临时性的特征。&#xff08; 对 &#xff09; 4、项目开发过程…

你的计算机配置似乎是正确的,但该设备或资源DNS没有响应

方法/步骤 方法一&#xff1a; 快捷键“winr”,输入services.msc&#xff0c;进入服务界面&#xff0c;找到dnsclient&#xff0c;确保是运行状态&#xff0c;如果没有运行&#xff0c;则选中该条目&#xff0c;右键选择运行。 电脑提示“您的计算机配置似乎是正确”&#xf…

长难句打卡5.6

For H&M to offer a $5.95 knit miniskirt in all its 2,300-plus stores around the world, it must rely on low-wage overseas labor, order in volumes that strain natural resources, and use massive amounts of harmful chemicals. 翻译:H&M若要在其全球总共2…

.Net MAUI 搭建Android 开发环境

一、 安装最新版本 VS 2022 安装时候选择上 .Net MAUI 跨平台开发 二、安装成功后,创建 .Net MAUI 应用 三、使用 VS 自带的 Android SDK 下载 ,Android镜像、编译工具、加速工具 四、使用Vs 自带的 Android Avd 创建虚拟机 五、使用 Android 手机真机调试

【软考高项】三十五、资源管理基础内容

一、管理基础 项目资源管理包括识别、获取和管理所需资源以成功完成项目的各个过程&#xff0c;包括实物资源和团队资源。项目资源管理是为了降低项目成本&#xff0c;而对项目所需的人力、材料、机械、技术、资金等资源所进行的计划、组织、指挥、协调和控制等的活动。项目团…

Milvus Cloud 的RAG 的广泛应用及其独特优势

一个典型的 RAG 框架可以分为检索器(Retriever)和生成器(Generator)两块,检索过程包括为数据(如 Documents)做切分、嵌入向量(Embedding)、并构建索引(Chunks Vectors),再通过向量检索以召回相关结果,而生成过程则是利用基于检索结果(Context)增强的 Prompt 来激…

Web API之DOM

DOM 一.认识DOM二.获取元素三.事件基础四.操作元素(1).改变元素内容(2).修改元素属性(str、herf、id、alt、title&#xff09;(3).修改表单属性(4).修改样式属性操作(5).小结 五.一些思想(1).排他思想(2).自定义属性的操作 六.节点操作1.认识2.节点层级关系3.创建和添加、删除、…

leetcode91.解码方法(动态规划)

问题描述&#xff1a; 一条包含字母 A-Z 的消息通过以下映射进行了 编码 &#xff1a; A -> "1" B -> "2" ... Z -> "26" 要 解码 已编码的消息&#xff0c;所有数字必须基于上述映射的方法&#xff0c;反向映射回字母&#xff08;可…

HFSS学习-day2-T形波导的优化设计

入门实例–T形波导的内场分析和优化设计 HFSS--此实例优化设计 优化设计要求1. 定义输出变量Power31、Power21、和Power11&#xff0c;表示Port3、Port2、Port1的输出功率2.参数扫描分析添加扫描变量和输出变量进行一个小设置添加输出变量进行扫描分析 3. 优化设计&#xff0c…

卸载系统自带APP

Firefly RK3588 android 12自动多个系统软件&#xff0c;无法从UI界面进行手动删除。因此&#xff0c;考虑使用shell指令进行处理。 系统自动APP大多都安装在system/app目录下&#xff0c;且该目录多为只读。因此采用如下步骤&#xff0c; //Shell su adb shell su //重新挂载…

【Linux】线程的内核级理解详谈页表以及虚拟地址到物理地址之间的转化

一、线程的概念 对于进程来说&#xff0c;进程创建时间和空间成本较高&#xff0c;因为进程是承担分配系统资源的基本实体&#xff0c;所以线程的出现就成为了必然。Linux线程与进程非常相似&#xff0c;Linux设计者在设计之初觉得如果再为线程设计数据结构和调度算法就会使整个…

增量同步笔记

2.2.2.增量同步 全量同步需要先做RDB&#xff0c;然后将RDB文件通过网络传输个slave&#xff0c;成本太高了。因此除了第一次做全量同步&#xff0c;其它大多数时候slave与master都是做增量同步。 什么是增量同步&#xff1f;就是只更新slave与master存在差异的部分数据。如图…

kubeflow简单记录

kubeflow 13.7k star 1、Training Operator 包括PytorchJob和XGboostJob&#xff0c;支持部署pytorch的分布式训练 2、KFServing快捷的部署推理服务 3、Jupyter Notebook 基于Web的交互式工具 4、Katib做超参数优化 5、Pipeline 基于Argo Workflow提供机器学习流程的创建、编排…

JAVA系列 小白入门参考资料 接口

目录 接口 接口的概念 语法 接口使用 接口实现用例 接口特性 实现多个接口和实现用例 接口间的继承 接口 接口的概念 在现实生活中&#xff0c;接口的例子比比皆是&#xff0c;比如&#xff1a;笔记本上的 USB 口&#xff0c;电源插座等。 电脑的 USB 口上&am…

【C语言】字符函数和字符串函数--超详解

前言&#xff1a; 在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了⽅便操作字符和字符串&#xff0c;C语⾔标准库中提供了 ⼀系列库函数&#xff0c;接下来我们就学习⼀下这些函数。 1. 字符分类函数 C语⾔中有⼀系列的函数是专⻔做字符分类的&#…

C++贪心算法

关于string的系统函数&#xff01; &#xff08;注&#xff1a;以下函数只可用于string&#xff0c;不适用其他类型的变量&#xff09; ① a.size(); 这个系统函数是用来获取这个string变量的长度的&#xff0c;我们通常会新建一个变量来保存他&#xff0c;以便之后使用。 …

Spring Boot | Spring Boot 整合 “RabbitMQ“ ( 消息中间件 ) 实现

目录: Spring Boot 整合 "RabbitMQ" ( 消息中间件 )实现 &#xff1a;一、Spring Boot 整合 整合实现 : Publish/Subscribe ( 发布订阅 ) 工作模式 ( "3种"整合实现方式 )1.1 基于"API"的方式 ( 实现 Publish/Subscribe "发布订阅"工作…

使用 MobaXterm 链接 Ubuntu(Windows子系统)

MobaXterm_Personal_22.1 Ubuntu&#xff08;Windows子系统&#xff09;

难定取舍,静观其变

今&#xff08;2024年5月8日&#xff09;天&#xff0c;本“人民体验官”在推广人民日报官方微博文化产品《带着笑意的眼睛&#xff0c;能看见最美的风景》的同时&#xff0c;还要联系4月初至今期间&#xff0c;与隐藏在《麻辣论坛》幕后的那位昵称“800727”者所爆发的一连串&…