剑指offer——反转单词顺序列

1. 题目描述

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

2. 思路分析

  思路就是从末尾开始查找。先定义一个指针指向当前末尾,另一个指针向前移动,找到空格的时候停下来,把已经查找到的串连接到答案中。思路比较简单,但是在写程序的时候,要在每个子串后面加空格,这个不要忘记了。

3. 解答(c++)

class Solution {
public:
    string ReverseSentence(string str) {
        string ans;
        if (str.empty()) {
            return ans;
        }
        int len = str.size();
        int head = 0;
        int end = len-1;
        int temp = len-1;
        while(temp != head) {
            if (str[temp] != ' ') {
                --temp;
            }
            else {
                for(int i = temp+1; i <= end; i++) {
                    ans += str[i];
                }
                ans += " ";
                end = temp-1;
                temp--;
            }
        }
        for(int i = 0; i <= end; i++) {
            ans += str[i];
        }
        return ans;
    }
};

时间1ms,内存376kb。

你可能感兴趣的:(剑指offer——反转单词顺序列)