我利用了额外的存储空间(栈)使得问题简单化,也可以直接在原string上做,但要记录当前待处理的string的长度,并及时将已经处理过的string从原string中删除
class Solution {
public:
void reverseWords(string &s) {
stack<string> stk;
int wordCnt=0;
bool wordStart=false;
string curWord;
for(int i=0;i<s.size();++i)
{
if(s[i]==' ')
{
if(wordStart)
{
wordStart=false;
stk.push(curWord);
++wordCnt;
curWord="";
}
else
{
//nothing need to do
}
}
else
{
if(wordStart)
{
curWord.append(1,s[i]);
}
else
{
wordStart=true;
curWord.append(1,s[i]);
}
}
}
if(curWord!="")
{
stk.push(curWord);
}
string res;
while(!stk.empty())
{
string tmp=stk.top();
stk.pop();
res.append(tmp);
res.append(1,' ');
}
s=res.substr(0,res.size()-1);
}
};