思路分析:
先将字符串首尾的空格删去,然后遍历删减过后的整个字符串,当遇到“ ”时进行单词的分割(利用if语句实现:1、多个空格时仅进行一次分割;2、结尾处进行一次分割),然后将单词储存到栈中,利用栈的特性翻转单词顺序到新字符串ans中,最后将ans返回。
代码实现:
class Solution
{
public:
string reverseWords(string s)
{
stack<string> overturn;
string x;
int left=0,right=s.size();
while(left<=right&&s[left]==' ')
left++;
while(left<=right&&s[right-1]==' ')
right--;
cout<<left<<' '<<right;
for(int i=left,j=0;i<=right;i++,j++)
{
if(s[i]!=' '&&s[i]!=0)
x+=s[i];
else if((s[i]==' '&&s[i-1]!=' ')||(s[i]==0&&s[i-1]!=' '))
{
overturn.push(x);
x.erase();
j=0;
}
}
string ans;
while(!overturn.empty())
{
ans+=overturn.top()+' ';
overturn.pop();
}
ans.erase(ans.size()-1);
return ans;
}
};
运行结果: