Leetcode 541.反转字符串II Reverse String II - Python

这篇博客探讨了一个Python实现的字符串翻转问题,通过定义一个内部函数`swap`进行字符串的局部交换。算法首先检查翻转长度是否超过字符串长度,然后以指定步长进行翻转操作,直至完成整个字符串的翻转。优化后的代码更简洁且易于理解。
class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        remain = len(s)
        res = list(s)
        def swap(front:int,rear:int) -> str:
            while front < rear:
                res[front], res[rear] = res[rear], res[front]
                front += 1
                rear -= 1
            return ''.join(res)

        if k > remain:
            ans = swap(len(s) - remain,len(s) - 1)
            return ans

        while k <= remain:
            ans = swap(len(s) - remain, len(s) - remain + k - 1)
            remain -= 2*k
        if remain<k:
            ans = swap(len(s) - remain,len(s) - 1)
            return ans
        elif remain<2*k and remain>k:
            ans = swap(len(s) - remain,len(s) - 1)
            return ans
        return ans


class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        remain = len(s)
        res = list(s)
        def swap(res:list[str]) -> list[str]:
            front, rear = 0, len(res) - 1
            while front < rear:
                res[front], res[rear] = res[rear], res[front]
                front += 1
                rear -= 1
            return res

        for i in range(0, len(res), 2*k):  #i每次跳2k,找到下一个待swap的字符串
            res[i: i + k] = swap(res[i: i + k])   
                                 #若[i: i + k] out of index 则会截取到字符串最后一个字母
        
        return ''.join(res)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值