梁越

剑指44-翻转单词顺序序列

0 人看过

反转字符

题目描述

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

例子

输入:”Student. a am I”
输出:”I am a Student.”

解法

我的解法是先分割字符串,再组合字符串

#include <vector>
#include <iostream>

using namespace std;

class Solution {
public:
    string ReverseSentence(string str) {
        vector<string> strList=split(str);  //分割
        if (str.empty() || strList.size()==0) return str; //输入为空或者分割为空,返回原字符
        //reverse(strList); //逆转
        string res;
        for(int i=strList.size()-1;i>0;i--)  //加上“ ”
        {
            res+=strList[i]+" ";
        }
        res+=strList[0]; //最后一个元素不需要空格
        return res;
    }

    vector<string> split(string templ)
    {
        vector<string> res;
        string temp;
        for(int i=0;i<templ.size();i++)  //遍历
        {
            if(templ[i]!=' ') temp+=templ[i];  //遇到非空格添加到字符串
            else{   //非空格则添加到结果列表
                if(!temp.empty())  //如果结果为空就不添加,这里很重要,不然添加到列表的元素可能为空的
                {
                    res.push_back(temp);
                    temp="";
                }
            }
        }
        if(!temp.empty()) res.push_back(temp); //添加最后一个元素
        return res;
    }
};

//void main()
//{
//    Solution s;
//    cout<< s.ReverseSentence("Student. a am I Yes right").c_str();
//}