题目链接: https://leetcode.com/problems/reverse-words-in-a-string-ii/
Given an input string, reverse the string word by word. A word is defined as a sequence of non-space characters.
The input string does not contain leading or trailing spaces and the words are always separated by a single space.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
Could you do it in-place without allocating extra space?
Related problem: Rotate Array
思路: 两次翻转即可, 单词翻转一次, 然后整体翻转一次. 这题比较好的是没有多余的空格, 所以还比较好处理.
代码如下:
class Solution {
public:
void reverseWords(string &s) {
if(s.size()==0) return;
int i= 0, len =s.size(), right = 0;
while(i < len)
{
while(right < len && s[right] != ' ') right++;
reverse(s.begin()+i, s.begin()+right);
i = ++right;
}
reverse(s.begin(), s.end());
}
};