题目
July 7, 2021 · View on GitHub
输入一个英文句子,单词之间用一个空格隔开,且句首和句尾没有多余空格。
翻转句子中单词的顺序,但单词内字符的顺序不变。
为简单起见,标点符号和普通字母一样处理。
例如输入字符串"I am a student.",则输出"student. a am I"。
样例
输入:"I am a student."
输出:"student. a am I"
参考答案
class Solution {
public:
string reverseWords(string s)
{
if(!s.size()) return "" ; //特判
vector<string> words ; //1 存储单词
for(int i=0,j=0;i<s.size();i=++j) //遍历循环,i为快指针,j为慢指针,i=++j是为了跳出空格,找出下一个单词
{
while(s[j]!=' '&&j<s.size()) j++ ;//2-1 双指针模板,找到单词结尾
words.push_back(s.substr(i,j-i)) ;//2-2&2-3 存入vector
}
reverse(words.begin(),words.end()) ; //3 反转vector
string res ; //答案
for(int i=0;i<words.size()-1;i++)
res+=words[i]+" " ; //4 拼接单词
res+=words[words.size()-1] ;
// 注意,最后一个单词后面没有空格,需要特判
return res ; //返回结果
}
};