题目:
Given an input string, reverse the string word by word.
Example:
Input: "the sky is blue
", Output: "blue is sky the
".
Note:
- A word is defined as a sequence of non-space characters.
- Input string may contain leading or trailing spaces. However, your reversed string should not contain leading or trailing spaces.
- You need to reduce multiple spaces between two words to a single space in the reversed string.
Follow up: For C programmers, try to solve it in-place in O(1) space.
解题思路:
难点在于不能使用太多额外的空间,只能O(1)。首先将整个字符串翻转,然后过滤单词,过程中去掉多余的空格,并对每个单词进行翻转。
代码:
public:
void reverseWords(string &s) {
if(s.length() < 1)
return;
reverse(s.begin(), s.end());
string r = "", cur = "";
for(int i = 0; i<s.length(); i++)
{
if(s[i] == ' ')
{
if(cur.length() > 0)
{
reverse(cur.begin(), cur.end());
if(r.length() > 0)
r += ' ' + cur;
else
r = cur;
cur = "";
}
continue;
}
cur += s[i];
}
if(cur.length() > 0)
{
reverse(cur.begin(), cur.end());
if(r.length() > 0)
r += ' ' + cur;
else
r = cur;
}
s = r;
return;
}