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::swap
s[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;
}
};
浙公网安备 33010602011771号