mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2024-09-02 14:20:01 +00:00
1.7 KiB
1.7 KiB
151. Reverse Words in a String
思路
翻转字符串中的单词,题目中给了我们写特别说明,如果单词之间遇到多个空格,只能返回一个,而且首尾不能有单词.
思路一
我们新建一个初始化为空的结果字符串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;
}
};