151. 顛倒字串中的單詞
阿新 • • 發佈:2022-06-06
151. 顛倒字串中的單詞
給你一個字串 s
,顛倒字串中 單詞 的順序。
單詞 是由非空格字元組成的字串。s
中使用至少一個空格將字串中的 單詞 分隔開。
返回 單詞 順序顛倒且 單詞 之間用單個空格連線的結果字串。
注意:輸入字串 s
中可能會存在前導空格、尾隨空格或者單詞間的多個空格。返回的結果字串中,單詞間應當僅用單個空格分隔,且不包含任何額外的空格。
示例 1:
輸入:s = "the sky is blue"
輸出:"blue is sky the"
示例 2:
輸入:s = " hello world " 輸出:"world hello" 解釋:顛倒後的字串中不能存在前導空格和尾隨空格。
示例 3:
輸入:s = "a good example"
輸出:"example good a"
解釋:如果兩個單詞間有多餘的空格,顛倒後的字串需要將單詞間的空格減少到僅有一個。
提示:
1 <= s.length <= 104
-
s
包含英文大小寫字母、數字和空格' '
-
s
中 至少存在一個 單詞
進階:如果字串在你使用的程式語言中是一種可變資料型別,請嘗試使用 O(1)
額外空間複雜度的 原地 解法。
思路:
使用O(1)額外空間複雜度,原地求解,主要看註釋把,這種題目需要自己畫圖理解
class Solution { public: string reverseWords(string s) { //先反轉連結串列 reverse(s.begin(),s.end()); int index=0; for(int i=0;i<s.size();i++){ //尋找一個單詞的開頭 if(s[i]!=' '){ if(index!=0)s[index++]=' ';//需要放置下一個單詞 那麼要加上空格 int end=i; //把這個單詞放到index處去 while(end<s.size()&&s[end]!=' '){ s[index++]=s[end++]; } // 反轉整個單詞 重點是要明白當前單詞所在區間 reverse(s.begin() + index - (end-i), s.begin() + index); i=end; } } //把尾部空格刪除 s.erase(s.begin()+index,s.end()); return s; } };