dapaogege

导航

 

lecode344

class Solution {
public:
void reverseString(vector& s) {
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;
}

};

posted on 2025-12-23 19:31  dapaogege  阅读(0)  评论(0)    收藏  举报