题目链接:
题目描述:
将字符串逆转。
For example,
Given s = “the sky is blue”,
return “blue is sky the”.
需要注意的是开头,中间,结尾可能会有多余的空格。麻烦的就是去掉多余的空格。
分析:
用istringstream的话,会变得很简单。先贴上istringstream的解决方案吧。stringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。这样就去掉了多余的空格。
第二种方法就是将每个单词先逆转了,最后再将整个字符串逆转。注意去掉多余空格。
第二个方法是参考别人的QAQ,找不到那篇文了,希望大神不要怪我没贴链接。
代码:
方法一:
class Solution {
public:
void reverseWords(istringstream& ss,string &s){
string word;
if(ss>>word){
reverseWords(ss,s);
if(s==""){
s=word;
}
else{
s+=" "+word;
}
}
}
void reverseWords(string &s) {
istringstream ss(s);
reverseWords(ss,s="");
}
};
方法二:
class Solution {
public:
void reverse(string& s,int left,int right){
while(left<right){
char ch=s[right];
s[right--]=s[left];
s[left++]=ch;
}
}
void reverseWords(string &s) {
int len=s.size();
int i=0,left=0,right=0;
bool flag=false;
while(i<len){
while(i<len && s[i]==' '){
i++;
}
if(i==len){
break;
}
if(flag){
s[right++]=' ';
}
left=right;
while(i<len && s[i]!=' '){
s[right++]=s[i++];
}
reverse(s,left,right-1);
flag=true;
}
s.resize(right);
reverse(s,0,right-1);
}
};