[leetcode]151.翻转字符串里的单词
生活随笔
收集整理的這篇文章主要介紹了
[leetcode]151.翻转字符串里的单词
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給你一個字符串 s ,逐個翻轉字符串中的所有 單詞 。
單詞 是由非空格字符組成的字符串。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"
解釋:如果兩個單詞間有多余的空格,將翻轉后單詞間的空格減少到只含一個。
?示例 4:
輸入:s = " Bob Loves Alice " 輸出:"Alice Loves Bob"示例 5:
輸入:s = "Alice does not even like bob" 輸出:"bob like even not does Alice"?提示:
- 1 <= s.length <= 104
- s?包含英文大小寫字母、數字和空格?' '
- s?中?至少存在一個?單詞
進階:
- 請嘗試使用?O(1)?額外空間復雜度的原地解法。
雙指針
class Solution: # 1.去除多余的空格def trim_space(self, s: str) -> str:n=len(s)left=0right=n-1while left<=right and s[left]==' ':left+=1while left<=right and s[right]==' ':right-=1tmp=[]while left<=right:if s[left]!=' ':tmp.append(s[left])elif tmp[-1]!=' ':tmp.append(s[left])left+=1return tmp # 2.翻轉字符串def reverse_string(self,nums,left,right):while left<right:nums[left],nums[right]=nums[right],nums[left]left+=1right-=1return None # 3.翻轉每個單詞def reverse_each_word(self,nums):start=0end=0n=len(nums)while start<n:while end<n and nums[end]!=' ':end+=1self.reverse_string(nums,start,end-1)start=end+1end+=1return None # 4.翻轉字符串里的單詞def reverseWords(self,s):l=self.trim_space(s)self.reverse_string(l,0,len(l)-1)self.reverse_each_word(l)return ''.join(l)總結
以上是生活随笔為你收集整理的[leetcode]151.翻转字符串里的单词的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [leetcode]541.反转字符串|
- 下一篇: 剑指offer58-||.左旋转字符串