使用棧
將單詞壓入棧,再彈出重新組合成字符串。
class Solution {
public:
string reverseWords(string s) {
if(s=="") return s;
stack<string> stk;
string str="";
int st=0,ed=s.length()-1;
while(st<=ed&&s[st]==' ')//刪去前面空格
st++;
if(st>ed)return str;//s=" "的特殊情況
while(s[ed]==' ')//刪去前面空格
ed--;
for(int i=st;i<=ed;i++)
{
if(s[i]!=' ')
str+=s[i];
else
{
if(s[i-1]!=' ')//刪去中間兩個空格
{
stk.push(str);
str="";
}
}
}
str=(str!="")?str+' ':str;
while(!stk.empty())
{
str+=stk.top()+' ';
stk.pop();
}
return str.substr(0,str.size()-1);
}
};
不使用棧
先整體反轉,再根據空格鎖定
s[i,ed],即單詞的位置
,局部反轉加回去。
class Solution {
public:
string reverseWords(string s) {
reverse(s.begin(),s.end());
string str="",tmp;
for(int i=0;i<s.length();i++)
{
if(s[i]!=' ')
{
int ed=i;
while(ed<s.length()&&s[ed]!=' ')
ed++;
tmp=s.substr(i,ed-i);
reverse(tmp.begin(),tmp.end());
str+=tmp+' ';
i=ed-1;
}
}
return str.substr(0,str.size()-1);
}
};