题目描述:
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.
这题我用了最直观的方法:先把word一个一个挑出来,放到一个stack中,然后把stack中的word一个一个pop出来组成string。这里写code注意小心处理最后一个word的情况就好。
Mycode(AC = 12ms):
class Solution {
public:
/**
* @param s : A string
* @return : A string
*/
string reverseWords(string s) {
// write your code here
stack<string> words;
// select out each word in the string
// and put them into a stack
int l = 0, r = 0;
while (l < s.length()) {
while (l < s.length() && s[l] == ' ') {
l++;
}
if (l >= s.length()) break;
r = l;
while (r < s.length() && s[r] != ' ') {
r++;
}
string word = s.substr(l, r - l);
words.push(word);
l = r + 1;
}
// pop out word in the stack and
// get the final string
string ans = "";
while (!words.empty()) {
ans = ans + words.top() + " ";
words.pop();
}
return ans == ""? ans : ans.substr(0, ans.length() - 1);
}
};