# [151. Reverse Words in a String](https://leetcode.com/problems/reverse-words-in-a-string/) # 思路 翻转字符串中的单词,题目中给了我们写特别说明,如果单词之间遇到多个空格,只能返回一个,而且首尾不能有单词. ## 思路一 我们新建一个初始化为空的结果字符串res, 从后往前遍历字符串s将每个单词不断拼接到res的尾部就可以了. ## 思路二 题目还要求对使用C的同学满足O(1)的复杂度, 那我们就只能在s上进行修改了. 我们先整个字符串整体翻转一次,然后再分别翻转每一个单词,此时就能得到我们需要的结果了。 # C++ ## 思路一 ``` 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; } }; ``` ## 思路二 ``` C++ 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; } }; ```