AcWing77-翻转单词顺序(中等)
翻转单词顺序
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。
注意头尾有空格时忽略
方法1:
利用stringstream的特性 空格自动截断
class Solution {
public:
string reverseWords(string s) {
if(s.length()==0) return s;
string ans,temp;
stringstream ss(s);//啊记住这个写法吧还是
while(ss>>temp){//会按空格读取
ans=temp+' '+ans;
}
ans.pop_back();
return ans;
}
};方法2:
class Solution {
public:
string reverseWords(string s) {
vector<string> ans;//保存截取的一段段的字符串
if(s.length()==0) return s;
bool flag=false;
int left=0,right=0;//双指针遍历
while(right<s.size()){
left=right;//左指针继续上次循环结束时右指针的地方开始
while(left!=s.size()&&s[left]==' ') left++;//左指针移动到字符串的一个出现的位置
right=left;//右指针从左指针处开始找结束
while(right!=s.size()&&s[right]!=' ') right++;////左指针移动到字符串最后的位置+1
if(left==right) break;//一样是表示都越界了 搜索结束了
ans.push_back(s.substr(left,right-left));//截取后放到vector中
flag=true;//设标志位是避免输入为“ ”的情况
}
if(!flag) return "";
reverse(ans.begin(),ans.end());//倒叙输出,所以反转下
string str_ans;
for(string i:ans)
str_ans+=i+' ';
str_ans[str_ans.size()-1]='\0';//最后会多一个空格,所以赋值结束符
return str_ans;
}
};
查看1道真题和解析
