541. 反转字符串2(Python)

题目

难度:★★☆☆☆
类型:字符串

给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。

要求
该字符串只包含小写的英文字母。
给定字符串的长度和 k 在[1, 10000]范围内。

示例

输入: s = "abcdefg", k = 2
输出: "bacdfeg"

解答

我们要处理的2k个字符称作一个逆转单元,每个使用三个指针左指针、中指针和右指针指向逆转单元逆转区域的左端位置,右端位置和逆转单元的右端位置,相邻指针之间的距离都是k,使用循环实现逆转:

  1. 左中右指针初始化分别为0,k和2k,代表第一个单元,定义结果字符串用于记录结果;

  2. 循环控制条件:结果字符串达到原始字符串长度时跳出循环;

  3. 循环过程,记录每个逆转单元的处理结果,并更新三个指针,更新方式为统一右移2k个单位。

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        left, mid, right = 0, k, 2 * k                  # 初始化左中右指针
        res = ''                                        # 初始化结果字符串
        while len(res) < len(s):                        # 满足条件时执行
            res += s[left:mid][::-1] + s[mid:right]     # 把当前单元的结果添加到结果字符串
            left, mid, right = left + 2 * k, mid + 2 * k, right + 2 * k                          
        return res                                      # 返回结果

如有疑问或建议,欢迎评论区留言~

你可能感兴趣的:(541. 反转字符串2(Python))