LeetCode-Python-186. 翻转字符串里的单词 II

博客围绕给定字符串,介绍逐个翻转其中每个单词的方法。明确单词定义,输入无前后置空格且单词以单空格分隔,还提及进阶的O(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(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)#把最后一个单词翻转

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值