题目

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 ;                         //返回结果
    }
};