欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

151. Reverse Words in a String

程序员文章站 2024-03-19 18:43:28
...

151. Reverse Words in a String

151. Reverse Words in a String

这道题给出一个字符串,包括一些单词,每个单词中间有空格,要求把句子中的单词倒置。如果单词之间有多个空格,那么只保留一个空格。

首先把整个字符串倒置。然后设置两个指针start和end,每次指向一个完整单词的首尾,然后把这个单词中的字符倒置,完成之后令start = end+1。如果有多个空格,那么这时候start位置是空字符,所以每次while循环开始的时候都要把start位置的空格在字符串中删掉。

还有一个问题,在整个循环结束的时候,有可能最后一个位置是空格,所以必须另外看最后一个位置是不是空格,是的话删掉。

中间还有一个地方出错过,就是nextstart那里。因为end从start开始往后移动,有两种情况会让end停下来,一种是end是空格,还有一种是end是字符串结束符。这两种情况下的nextstart不一样,要注意。

class Solution {
public:
    void reverseWords(string &s) {
        reverse(s.begin(), s.end());
        int start = 0, end = 0;
        while(start < s.size()){
            if(s[start] == ' '){
                s.erase(s.begin() + start);
                continue;
            }
            end = start;
            while(end < s.size() && s[end]!=' '){
                end++;
            }
            int nextstart = (end == s.size())?s.size():end+1;
            end--;
            while(start < end){
                swap(s[start], s[end]);
                start++;
                end--;
            }
            start = nextstart;
        }
        if(s[s.size()-1] == ' ')
            s.erase(s.begin() + s.size()-1);
    }
};