LeetCode 151 Reverse Words in a String
思路
-
多余的空格去掉,包括头尾的空格,单词之间多余的空格
-
将每个单词在原地翻转
-
将整个句子翻转
第一份代码是将各步骤分开写,第二份代码将各步骤合在一起。
代码
class Solution {
public:
string reverseWords(string s) {
// 去掉多余的空格
int slow = 0, fast = 0;
while (fast < s.size()) {
while (fast < s.size() && s[fast] == ' ') ++fast;
// 这里不能拆开写成2个if,slow > 0是为了保证第一个单词前不会有空格
if (fast < s.size() && slow > 0) s[slow++] = ' ';
while (fast < s.size() && s[fast] != ' ')
s[slow++] = s[fast++];
}
s.resize(slow);
slow = 0, fast = 0;
while (fast < s.size()) {
while (fast < s.size() && s[fast] != ' ') ++fast;
reverse(s.begin() + slow, s.begin() + fast);
++fast;
slow = fast;
}
reverse(s.begin(), s.end());
return s;
}
};
class Solution {
public:
string reverseWords(string s) {
int slow = 0, fast = 0, start = 0;
while (fast < s.size()) {
while (fast < s.size() && s[fast] == ' ') ++fast;
if (fast < s.size() && slow > 0) s[slow++] = ' ';
start = slow;
while (fast < s.size() && s[fast] != ' ')
s[slow++] = s[fast++];
reverse(s.begin() + start, s.begin() + slow);
}
s.resize(slow);
reverse(s.begin(), s.end());
return s;
}
};