leetcode 557. Reverse Words in a String III 、151. Reverse Words in a String

557. Reverse Words in a String III

最简单的把空白之间的词反转

class Solution {
public:
    string reverseWords(string s) {
        vector<int> blank;
        for(int i = 0;i < s.size();i++){
            if(s[i] == ' ')
                blank.push_back(i);
        }
        int start = 0;
        int end;
        for(int i = 0;i < blank.size();i++){
            end = blank[i] - 1;
            reverse(s,start,end);
            start = end + 2;
        }
        reverse(s,start,s.size() - 1);
        return s;
    }
    void reverse(string& s,int start,int end){
        while(start < end){
            char tmp = s[end];
            s[end] = s[start];
            s[start] = tmp;
            start++;
            end--;
        }
        return;
    }
};

 

151. Reverse Words in a String

151题实际上比557题要难一些。难在,字符串中的空格不再仅仅在字符之间,在字符串的开头和结尾都可能有,并且空格的个数不再仅仅是1,而是有可能有许多。

输出的要求则是只能是字符+一个空格作为中间的间隔。

思路:先把整个字符串reverse,然后找每个子字符串第一个字符和最后一个,遇到空格都跳过,然后把这些子字符串reverse并+一个空格,最后一个处理的时候,我有点不知道怎么处理多出的末尾

的空格, 就用了一种暴力的方法

class Solution {
public:
    string reverseWords(string s) {
        if(s.empty())
            return "";
        string res = "";
        reverse(s,0,s.size() - 1);
        for(int i = 0;i < s.size();i++){
            if(s[i] != ' '){
                int j = i;
                while(s[j] != ' ' && j < s.size())
                    j++;
                reverse(s,i,j-1);
                res += s.substr(i,j-i);
                res += " ";
                i = j;
            }
        }
        res = res.substr(0,res.size() - 1);
        return res;
    }
    void reverse(string& s,int start,int end){
        while(start < end){
            char tmp = s[end];
            s[end] = s[start];
            s[start] = tmp;
            end--;
            start++;
        }
        return;
    }
};

 

posted @ 2019-04-18 22:16  有梦就要去实现他  阅读(103)  评论(0编辑  收藏  举报