文章目录
- 1.把字符串转换成整数
- 题目详情
- 代码
- 思路
- 2. 344.反转字符串
- 题目详情
- 代码1
- 思路1
- 代码2
- 思路
- 3. 387. 字符串中的第一个唯一字符
- 题目详情
- 代码
- 思路
- 4. 917. 仅仅反转字母
- 题目详情
- 代码
- 思路
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,而不是arrfor(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 指针相遇时,整个字符串就完成了反转
今天就到这里啦!