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

力扣——1.返回字符串中第一个唯一的字符;2.把字符串转换成整数(C++)

1.返回字符串中第一个唯一的字符

1.1题目描述

给定一个字符串s ,找到它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。

示例:

1.2思路

这里提供两种思路:第一种是利用哈希表,先遍历一遍字符串存到数组中++(a"下标为0,后面字母一次加1),遍历完后,对字符串进行遍历,再那去与数组该位置比较,是否为1,为返回该位置。(注意:第二遍遍历时,不能遍历数组,要不然可能出现,第一次唯一出现的字符为'z'但后面又出现'a'也是唯一出现,但不是第一个,但这时候就会返回a的位置)。

第二种是先遍历利用正序,反序寻找,利用find函数这个函数是返回传入要找的字符第一次出现的下标,默认从0下标,开始从前向后找rfind函数这个函数是返回传入要找的字符第一次出现的下标,默认开始从后向前找),找到是否为同一个位置,如果是,那说明这个字符只出现了一次,就直接返回,如果遍历完没找到就直接返回-1。

1.3代码

方法一:

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

方法二:

class Solution {public:int firstUniqChar(string s) {for(int i=0; i<s.size(); ++i){int index = s.find(s[i]);int reverse_index = s.rfind(s[i]);  if(index == reverse_index)return i;}return -1;}};

 2把字符串转换成整数

2.1题目描述

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

读入字符串并丢弃无用的前导空格

检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。

读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。

将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。

如果整数数超过 32 位有符号整数范围 [−2^31,  2^31 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −2^31 ,大于 2^31 − 1 的整数应该被固定为 2^31 − 1 。

返回整数作为最终结果。

2.2思路

根据题目要求要排除字符串前面的空格,其次就是判断第一个符号位是否为负,所以这里定义一个下标,遇到就++,然后从这个位置,开始读,如果不是0~9字符就直接跳出循环,其次还要注意:是否已经超出整型范围,所以可以定义这个数的时候用long long,再去和INT_MAX,INT_MIN比较,如果超出范围,就直接输出这个边界值,没有超出范围,就返回这个值。

2.3代码

class Solution {
public:int myAtoi(string str) {int i=0;while(str[i]==' '){i++;}int flag=1;if(str[i]=='-'){flag=-1;}if(str[i]=='-'||str[i]=='+')i++;long long sum=0;for(;i<str.size();i++){if(str[i]>='0'&&str[i]<='9'){                 sum=sum*10+(str[i]-'0');if(sum>INT_MAX)return flag==1?INT_MAX:INT_MIN;}elsebreak;}int ret=sum*flag;return ret;}
};

http://www.lryc.cn/news/499201.html

相关文章:

  • M-LAG【根桥方式】
  • 新书速览|循序渐进Node.js企业级开发实践
  • Xlsxwriter生成Excel文件时TypeError异常处理
  • 【NLP高频面题 - LLM架构篇】大模型使用SwiGLU相对于ReLU有什么好处?
  • 2021 年“泰迪杯”数据分析技能赛B 题肥料登记数据分析
  • 网络原理之 IP 协议
  • 在 Spring Boot 项目中使用 Thymeleaf 时,通常情况下,你需要配置热加载(Hot Reload)来在开发过程中更快速地看到页面的变化。
  • arm-linux GPIO控制-脚本及shell格式
  • Go 语言基础知识语法
  • 贪心算法part05
  • 02、SpringMVC核心(上)
  • EasyPlayerPro的同一个组件实例根据url不同展示视频流
  • 哈希表介绍、实现与封装
  • 使用vm配置网络
  • OpenStack介绍
  • 力扣93题:复原 IP 地址
  • mock.js介绍
  • React开发 - 技术细节汇总一
  • 【论文复现】分割万物-SAM
  • 实现RAGFlow-0.14.1的输入框多行输入和消息框的多行显示
  • Pointnet++改进71:添加LFE模块|高效长距离注意力网络
  • C++STL容器vector容器大小相关函数
  • 阿里云CPU超载解决记录
  • 【工具变量】上市公司企业商业信用融资数据(2003-2022年)
  • 2024数字科技生态大会 | 紫光展锐携手中国电信助力数字科技高质量发展
  • ES语法(一)概括
  • (vue)el-cascader多选级联选择器,值取最后一级的数据
  • 友思特方案 | 精密制程的光影贴合:半导体制造中的高功率紫外光源
  • README写作技巧
  • 【密码学】分组密码的工作模式