1. 程式人生 > 實用技巧 >作為Java新手,如何才能快速的看透一個Java專案?

作為Java新手,如何才能快速的看透一個Java專案?

劍指 offer 58

題目

輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。為簡單起見,標點符號和普通字母一樣處理。例如輸入字串"I am a student. ",則輸出"student. a am I"。

  • 無空格字元構成一個單詞。
  • 輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。
  • 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。

演算法

  • 雙指標問題。
  • 一個指標從後往前尋找第一個非空格字元,另一個指標從前一個指標指向的非空格字元出發,直到找到一個空格字元為止。
  • 將左指標賦給右指標,繼續直到index為零

程式碼

class Solution {
public:
    string reverseWords(string s) {
        string result;
        int n = s.size();
        if(n == 0) return result;
        int right = n - 1;
        while(right >= 0){
            //從後往前尋找第一字元
            while(right >= 0 && s[right] == ' ') right--;
            if(right < 0) break;

            //從後往前尋找第一個空格
            int left = right;
            while( left >= 0 && s[left] != ' ' ) left--;

            //新增單詞到結果
            result += s.substr(left + 1, right - left);
            result += ' ';

            //繼續往前分割單詞
            right = left;
        }
        //去除最後一個字元空格
        if (!result.empty()) result.pop_back();
        return result;
    }
};