Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
Clarification:
- What constitutes a word?
A sequence of non-space characters constitutes a word. - Could the input string contain leading or trailing spaces?
Yes. However, your reversed string should not contain leading or trailing spaces. - How about multiple spaces between two words?
Reduce them to a single space in the reversed string.
class Solution {
public:
void reverseWords(string &s) {
bool first = true;
string temp = " ";
temp += s + " ";
s.clear();
for (int i = temp.size() - 1; i > 0;) {
if (temp[i] == ' ' && temp[i - 1] != ' ') {
int j;
for (j = i - 1; j > 0; j--) {
if (temp[j] != ' ' && temp[j - 1] == ' ') {
if (!first) {
s += " ";
}
first = false;
s += temp.substr(j, i - j);
break;
}
}
i = j - 1;
} else {
i--;
}
}
}
};