Skip to content

Latest commit

 

History

History
56 lines (50 loc) · 1.72 KB

151. Reverse Words in a String.md

File metadata and controls

56 lines (50 loc) · 1.72 KB

思路

翻转字符串中的单词,题目中给了我们写特别说明,如果单词之间遇到多个空格,只能返回一个,而且首尾不能有单词.

思路一

我们新建一个初始化为空的结果字符串res, 从后往前遍历字符串s将每个单词不断拼接到res的尾部就可以了.

思路二

题目还要求对使用C的同学满足O(1)的复杂度, 那我们就只能在s上进行修改了.

我们先整个字符串整体翻转一次,然后再分别翻转每一个单词,此时就能得到我们需要的结果了。

C++

思路一

class Solution {
public:
    string reverseWords(string s) {
        string res = "";
        int low, high = s.size() - 1;
        while(high >= 0){
            while(high >= 0 && s[high] == ' ') high--;
            if(high < 0) return res;
            low = high - 1;
            while(low >= 0 && s[low] != ' ') low--;
            
            if(res != "") res += " ";
            res += s.substr(low+1, high - low);
            high = low - 1;
        }
        return res;
    }
};

思路二

class Solution {
public:
    string reverseWords(string s) {
        reverse(s.begin(), s.end());
        int len = 0; // 结果字符串的长度
        for(int i = 0; i < s.size(); i++){
            if(s[i] != ' '){
                if(len != 0) s[len++] = ' ';
                int j = i;
                while(j < s.size() && s[j] != ' ') s[len++] = s[j++];
                reverse(s.begin() + len - (j - i), s.begin() + len);
                i = j;
            }
        }
        s.resize(len); // 修改字符串长度
        return s;
    }
};