1.把字符串转换成整数
题目详情
代码
class Solution { public: int StrToInt(string str) { int flag=1; long long ret=0; string::iterator it=str.begin(); // 处理空字符串的情况 if (it == str.end()) { return 0; } // 处理符号 if (*it == '-') { flag = -1; ++it; } else if (*it == '+') { ++it; } // 遍历字符串,将每个字符转换为数字并累加到结果中 while (it != str.end()) { if (*it >= '0' && *it <= '9') { ret = ret * 10 + (*it - '0'); ++it; } else { return 0; } } // 根据符号返回最终结果 return flag * ret; } };
思路
首先处理空字符串为空的情况()
再处理第一个字符可能为+ -的情况,直接定一个flag初始化为1,遇到-就赋值为-1
接下来就利用迭代器进行循环,如果是字符数字就直接使用
ret = ret * 10 + (*it - '0');
是其他字符,直接return 0;了
2. 344.反转字符串
题目详情
代码1
class Solution { public: void reverseString(vector<char>& s) { reverse(s.begin(),s.end()); } } };
思路1
大家学习了c++,可能直接就想到了。但是我们刷题还是尽量会本质
代码2
class Solution { public: void reverseString(vector<char>& s) { //reverse(s.begin(),s.end()); int left=0; int right=s.size()-1; while(left<right) { swap(s[left],s[right]); left++; right--; } } };
思路
还是老朋友啦:使用双指针法,进行交换,直到相遇
3. 387. 字符串中的第一个唯一字符
题目详情
代码
class Solution { public: int firstUniqChar(string s) { int arr[26]={0}; int index=0; char singal='0'; //不会出现空字符 for(auto e:s) { arr[e-'a']++; } //再次遍历string,而不是arr for(int i=0;i<s.size();i++) { if(arr[s[i]-'a']==1) { return i; } } return -1; } };
思路
利用计数排序的思想,利用一个数组
我们看到,这个字符串只会出现小写字母,我们就定义一个整型数组 arr[26]:0处是a,1处是b…,25处是z
先把string给遍历一遍,这里是使用了范围for:哪个字母出现一此,就使用 arr[e-'a']++;来进行自增,现在出现一次的字母对应在数组里的值是1,两次是2
有时有多个出现一次的字母,我们需要返回的是第一个
所以还是从string开始遍历,为了返回第一个(我一开始因为从arr开始遍历,一直不能通过)
4. 917. 仅仅反转字母
题目详情
代码
class Solution { public: bool isLetter(char ar) { if((ar>='A'&&ar<='Z')||(ar>='a'&&ar<='z')) { return true; } return false; } string reverseOnlyLetters(string s) { //仿照快排一次的思想 int left=0; int right=s.size()-1; while(left<right) { //右侧先行 while(left<right&&!isLetter(s[right]))//找字母才停 { right--; } while(left<right&&!isLetter(s[left]))//找字母 { left++; } swap(s[left],s[right]); right--; left++; } return s; } };
思路
使用双指针的方法,类似于快速排序中的一次划分。
具体来说,维护了两个指针(下标) left 和 right,它们分别指向字符串的开头和结尾。
然后,你使用 while 循环来不断移动这两个指针,并在遇到字母时进行交换。当 left 指向的字符不是字母时,left 指针向右移动;当 right 指向的字符不是字母时,right 指针向左移动。
一旦找到了两个位置上的字母,就交换它们的位置。最终,当 left 和 right 指针相遇时,整个字符串就完成了反转
今天就到这里啦!