lecode344
class Solution {
public:
void reverseString(vector
int left = 0;
int right = s.size() - 1; // 修正1:索引必须减 1
while(left < right){// 修正2:正确的交换逻辑char temp = s[left];s[left] = s[right]; //也可以直接用std::swaps[right] = temp; // 把暂存的值赋给右边left++;right--;}
}
};
lecode151
class Solution {
public:
void my_reverse(string &s, int left, int right) {
while (left < right) {
swap(s[left], s[right]);
left++; //自定义一个reverse
right--;
}
}
string reverseWords(string s) {
//先用快慢指针来删除空格
int slow=0;
for(int fast=0;fast<s.length();fast++){
if(s[fast]!=' '){ //删除空格的操作,fast往前走,slow负责在后面填充
if(slow!=0)
s[slow++]=' ';
// 正确写法
while (fast < s.length() && s[fast] != ' '){ //对一个单词,直接整个插入,防止空格处理错误
s[slow++]=s[fast++];
}
}
}
s.resize(slow); //长度定义为slow的长度
//先整体反转my_reverse(s,0,slow-1);//分段反转int b;for(int a=0;a<s.length();a++){if(s[a]!=' '){b=a;while(a<s.length()&&s[a]!=' '){ //循环找到单词的边界a++;}my_reverse(s,b,a-1);}}return s;
}
};