代码随想录|Day07|字符串01|344.反转字符串、541. 反转字符串II、151. 反转字符串中的单词

344. 反转字符串

熟悉双指针的同学,这题应该可以秒了。

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        left, right = 0, len(s) - 1

        while left < right:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1
        return s

541. 反转字符串II

思路:遍历步长设为 2k,使用双指针反转前 k 个字符。

在字符串末尾,如果剩余字符不足 2k 个,有以下两个观察:

1. 剩余字符数量介于 k2k 个,双指针可以顺利反转前 k 个字符

2. 剩余字符数量不到 k 个,需要反转所有剩余字符

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        # 先将字符串转为列表,便于操作,最后转为字符串输出
        s = list(s)

        for i in range(0, len(s), 2*k):
            # right的判断是为了应对字符串尾部的2种情况
            left, right = i, min(i + k - 1, len(s) - 1)
            # 双指针反转
            while left < right:
                s[left], s[right] = s[right], s[left]
                left += 1
                right -= 1

        return ''.join(s)

151. 反转字符串中的单词

思路:将字符串按空格拆分为列表,里面包含所有单词,接着使用双指针反转所有单词。

class Solution:
    def reverseWords(self, s: str) -> str:

        words = s.split()

        left, right = 0, len(words) - 1
        
        while left < right:
            words[left], words[right] = words[right], words[left]
            left += 1
            right -= 1
        return ' '.join(words)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值