作為Java新手,如何才能快速的看透一個Java專案?
阿新 • • 發佈:2020-12-23
劍指 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; } };