剑指offer-翻转单词序列
描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“nowcoder. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a nowcoder.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
求解思路:
- 很简单,通过空格划分元素(字串),然后把字串倒过来就行。
- 但是看题要仔细,还以为字串内部也要翻转,浪费了我很多时间。
1 class Solution { 2 public: 3 string ReverseSentence(string str) { 4 // 首先得通过空格划分哪些字符属于一个整体(字串) 5 // 然后翻转子串 6 vector<string> strv; 7 string::iterator ite=str.begin(); 8 string tmp=""; 9 // 完成子串的划分 10 while(ite!=str.end()){ 11 if(*ite!=' '){ // 如果不是空格,就划分到字串中 12 tmp+=*ite; 13 }else{ 14 strv.push_back(tmp); 15 tmp=""; 16 } 17 ++ite; 18 } 19 strv.push_back(tmp); 20 // 翻转 21 int rec=strv.size()-1; 22 string res=""; 23 while(rec>=0){ 24 res+=strv[rec]+' '; 25 --rec; 26 } 27 return res.substr(0, res.length() - 1); 28 } 29 };
心之所愿,永不相忘