这个题目给的要求比较烦,刚开始以为直接把单词位置反转即可,结果用c++写完以后发现还要去掉左右两边的空格而且把单词之间多余的空格变成一个,果断使用python来写。
class Solution(object):
def reverseWords(self,s):
"""
:type s: str
:rtype: str
"""
s=s.lstrip();
s=s.rstrip();
l=s.split(" ");
l.reverse();
while('' in l):
l.remove('')
s=" ".join(l);
return s;
但是还是希望用c++实现它,又忙活了半天,结果如下:
class Solution {
public:
int find_first_char(string s,int start)
{
int i=start,len=s.size();
while(i<len)
{
if(s[i]!=' ')
{
return i;
}
i++;
}
return -1;
}
void reverse(int start,int end,string &s)
{
int i=start,j=end;
while(i<j)
{
char temp=s[i];s[i]=s[j];s[j]=temp;
i++;j--;
}
}
string strip(string s) //这个函数用来把多余的空格去掉
{
int length=s.size();
int j=0;string str="";
int start=s.find_first_not_of(' ');
int end=s.find_last_not_of(' ');
//cout<<start<<" "<<end<<endl;
if(start<0)
return str;
for(int i=start;i<=end;i++)
{
if(s[i]!=' '){str=str+s[i];j++;}
else if(s[i]==' '&& s[i-1]!=' '){str=str+s[i];j++;}
}
return str;
}
void reverseWords(string &s) {
s=strip(s);
int length=s.size();
if(length<=1)
return ;
//cout<<length;
reverse(0,length-1,s);
//cout<<s<<endl;
int start=find_first_char(s,0);
int end=start;
if(start<0)
return ;
while(true)
{
while(true)
{
if(s[end]==' '||end==length)
break;
else
end++;
}
reverse(start,end-1,s);
if(end==length)
return;
start=end=find_first_char(s,end);
if(start<0)
return;
}
}
};