问题:给定一个字符串,逐个翻转字符串中的每个单词。
思路:先局部, 再整体。
第一遍,一边去除掉多余的空格,一边局部翻转单词。
第二遍,整个句子翻转一遍。
代码:
class Solution {
public:
string reverseWords(string& s) {
int len=s.size();
int i=0,j=0;
while(i<len)
{
while(i<len&&s[i]==' ') // 同时处理句首、句中的空格。
++i;
if(i<len&&j>0)
s[j++]=' ';
int start=j;
while(i<len&&s[i]!=' ')
s[j++]=s[i++];
reverse(s.begin()+start,s.begin()+j);
}
s.resize(j);
reverse(s.begin(),s.end());
return s;
}
};
复杂度分析:时间复杂度为O(n),空间复杂度为O(1)。