leetcode_186 翻转字符串里的单词 II

188 阅读1分钟

要求

给定一个字符串,逐个翻转字符串中的每个单词。

示例:

输入: ["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:
    def reverseWords(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        s[:] = list(" ".join("".join(s).split(" ")[::-1]))

另一解法

class Solution:
    def reverseWords(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        l = len(s)
        if not l:
            return
        
        def reverse(start,end):
            left,right = start,end
            while left < right:
                s[left],s[right] = s[right],s[left]
                left += 1
                right -= 1
        
        reverse(0,l-1)
        first_char_index = 0
        for i,x in enumerate(s):
            if x == " ":
                reverse(first_char_index, i - 1)
                first_char_index = i + 1
        reverse(first_char_index,l - 1)

image.png

解题思路:第一种解法:我们使用python原有的库和方法完成反转,比较简单;第二种解法:就是我们自己写一个反转函数,不断的调用,将我们的每个单词都进行反转,比较简单。