给定一个字符串,逐个翻转字符串中的每个单词。
示例:
输入: ["t","h","e"," ","s","k","y"," ","i","s"," ","b","l","u","e"] 输出: ["b","l","u","e"," ","i","s"," ","s","k","y"," ","t","h","e"]注意:
单词的定义是不包含空格的一系列字符输入字符串中不会包含前置或尾随的空格单词与单词之间永远是以单个空格隔开的进阶:使用 O(1) 额外空间复杂度的原地解法。
第一种思路:
一顿调库猛如虎。
class Solution(object): def reverseWords(self, string): """ :type str: List[str] :rtype: None Do not return anything, modify str in-place instead. """ string[:] = list(" ".join("".join(string).split(" ")[::-1]))第二种思路:
先写一个工具函数,功能是把string中的某一段进行原地翻转,
然后先把整个string进行一次翻转,
再对string里的每个单词进行一次翻转。
class Solution(object): def reverseWords(self, string): """ :type str: List[str] :rtype: None Do not return anything, modify str in-place instead. """ l = len(string) if not l: return def reverse(start, end): #工具函数,功能是将string[start:end + 1]翻转 left, right = start, end while(left < right): string[left], string[right] = string[right], string[left] left += 1 right -= 1 reverse(0, l - 1) #先整个翻转 first_char_idx = 0 for i, x in enumerate(string): if x == " ": reverse(first_char_idx, i - 1) #再把每个单词进行翻转 first_char_idx = i + 1 reverse(first_char_idx, l - 1)#把最后一个单词翻转