劍指offer(58)-I
阿新 • • 發佈:2022-05-06
劍指offer(58)-I
劍指 Offer 58 - I. 翻轉單詞順序
難度簡單203
輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。為簡單起見,標點符號和普通字母一樣處理。例如輸入字串"I am a student. ",則輸出"student. a am I"。
示例 1:
輸入: "the sky is blue"
輸出: "blue is sky the"
示例 2:
輸入: " hello world! "
輸出: "world! hello"
解釋: 輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。
示例 3:
輸入: "a good example" 輸出: "example good a" 解釋: 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。
說明:
- 無空格字元構成一個單詞。
- 輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。
- 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。
從後向前遍歷,利用兩個指標端點即可
class Solution { public: string reverseWords(string s) { int n = s.size(); //雙端指標即可 從後向前遍歷 去反轉字詞 string ans = ""; for (int i = n - 1; i >= 0; i--) { if (s[i] != ' ') { int right = i; while (i >= 0 && s[i] != ' ') { i--; } ans += s.substr(i + 1, right - i) + " "; } } //ans.size()-1是因為最後有一個空格 return ans.substr(0, ans.size() - 1); } };