剑指offer:翻转单词序列

题目描述

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
 
整体思路:
  先翻转整个句子,然后再对单个单词进行翻转, 单词之间通过遍历字符串判断字符是否为' ‘’来区分。
 
代码:
1.简单的for循环翻转
class Solution {
public:
    void reversesort(string& str, int low , int high){
        for(int i = low; i <= (low + high) / 2; i++){
            swap(str[i], str[high+low-i]);
        }
    }
    
    string ReverseSentence(string str) {
        int len = str.size();
        if(str[0] == ' ') return str;
        reversesort(str, 0, len - 1); //整体翻转
        for(int i = 0, r = 0; r <= len;){
            if(str[r] != ' ' && r < len){
                r++;
            }else{
                reversesort(str, i, r - 1);
                i = ++r; //l = r + 1  r = r + 1;
            }
        }
        return str;
    }
};

 

2.

字符串拼接法

这个会慢一点,但是好理解。

class Solution {
public:
    string ReverseSentence(string str) {
         
        int len = str.size();
        string ans = "";
        string cur = "";
        for(int i = 0; i < len; i++){
            if(str[i] == ' ') ans = " " + cur + ans, cur = "";
            else cur += str[i];
        }
        if(cur.size()) ans = cur + ans;
        return ans;
    }
};

 

posted @ 2020-04-23 10:52  葱葱葱茏  阅读(151)  评论(0编辑  收藏  举报