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.
这个题目本身比较简单,但是要ac要注意很多细节,极端情况,用例中会有“ ” ,“x",” x ”, " x", "x ",之类的基本极端情况,要判断清楚,这里用vector存放每一个单词,然后在逆序存入s中, 主要注意判断字符串的末尾位置。
class Solution {
public:
void reverseWords(string &s) {
if (s.empty()) return ;
vector<string> res;
string tmp;
for (int i = 0; i < s.size(); ++i)
{
if (s[i] != ' ')
tmp.push_back(s[i]);
// 末尾位置以及单词的判断
if (tmp.size() && s[i] == ' ' || s[i] != ' ' && i == s.size() - 1)
{
res.push_back(tmp);
tmp.clear();
}
}
s.clear();
for (int i = res.size() - 1; i >= 0; --i)
{
s.append(res[i]);
if (i != 0)
s.push_back(' ');
}
}
};