剑指44-翻转单词顺序序列
反转字符
题目描述
牛客最近来了一个新员工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();
//}