1. 程式人生 > >劍指offer--翻轉單詞

劍指offer--翻轉單詞

牛客最近來了一個新員工Fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student.a am I”。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是“I am a student.”。Cat對一一的翻轉這些單詞順序可不在行,你能幫助他麼? 思路: 我們採取先把單詞整個反轉,也就是說第一個和最後一個互換位置,依次類推,然後再用一個迴圈,將單詞完成翻轉,也就是第一個和最後字元換。怎麼確定單詞的界限呢?空格之間,最後\0結束,以及開始。我們用兩個標誌物確定開始結束。然後再換。 具體程式碼實現:

class Solution {
public:
    void Swap(string& str,int start,int end)
    {
        while(end > start)
        {
            char tmp = str[start];
            str[start] = str[end];
            str[end] = tmp;
            start++;
            end--;
        }
    }
    string ReverseSentence(string str) {
        int start = 0;
        int end = str.size() - 1;
        Swap(str,start,end);
        end = str.size();
        start = 0;
        for(int i = 0;i <= str.size();i++)
        {
            if(str[i] == ' '|| str[i] == '\0')
            {
                end = i-1;
               Swap(str,start,end);
                start = i + 1;
            }
        }
        return str;
    }
};