题目描述:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。
方法1:双指针
/*
首先需要进行预处理,判断输入字符串是不是全部空格,如果是,直接输出字符串。
否则,
遍历字符串 s ,记录单词左右索引边界 i , j ;
每确定一个单词的边界,则将其倒着插入添加至单词列表 res ;
最终,将单词列表拼接为字符串,并返回即可。
*/
class Solution {
public:
string ReverseSentence(string str) {
if(str.empty())
return str;
string res="",temp="";
int len =str.size();
int left=0,right=0;
while(right<len)
{
while(str[right]==' ')
{
left++;
right++;
}
while(str[right]!=' '&&right<len)
{
right++;
}
if(left<len)
{
temp=str.substr(left,right-left);
res=temp+" "+res;
left=right;
}
}
res.pop_back();//删除最后多出来的空格
return res;
}
};
方法2:使用自带库函数stringstream按空格读取
string ReverseSentence(string str)
{
if(str.empty())
return str;
string res="",temp;
stringstream ss(str);//创建存储str的副本的 stringstream 对象
while(ss>>temp)按空格读取str
{
res=temp+" "+res;
}
//删除最后多出来的空格
res.pop_back();
return res;
}