常规做法:
逐个遍历然后拼接
class Solution {
public:
string reverseWords(string s) {
string res, tmp;
for (auto c : s) {
if (c != ' ') {
tmp += c;
continue;
}
if (tmp.size()) {
res = tmp + " " + res;
tmp.clear();
}
}
if (tmp.size()) {
res = tmp + " " + res;
tmp.clear();
}
return res.substr(0, res.size() - 1);
}
};
双指针:
上面的做法,因为字符逐个拼接,效率底下,其实可以选择好字符串的首位位置后,一次性拼接
class Solution {
public:
string reverseWords(string s) {
s.erase(0, s.find_first_not_of(" "));
s.erase(s.find_last_not_of(" ") + 1);
if (!s.size()) return s;
int i = s.size() - 1;
int j = i;
string res;
while (i >= 0) {
while (i >= 0 && s[i] != ' ') --i;
res += s.substr(i + 1, j - i) + ' ';
while (i >= 0 && s[i] == ' ') --i;
j = i;
}
return res.substr(0, res.size() - 1);
}
};