题目
难度:★★☆☆☆
类型:字符串
给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
要求
该字符串只包含小写的英文字母。
给定字符串的长度和 k 在[1, 10000]范围内。
示例
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
解答
我们要处理的2k个字符称作一个逆转单元,每个使用三个指针左指针、中指针和右指针指向逆转单元逆转区域的左端位置,右端位置和逆转单元的右端位置,相邻指针之间的距离都是k,使用循环实现逆转:
左中右指针初始化分别为0,k和2k,代表第一个单元,定义结果字符串用于记录结果;
循环控制条件:结果字符串达到原始字符串长度时跳出循环;
循环过程,记录每个逆转单元的处理结果,并更新三个指针,更新方式为统一右移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 # 返回结果
如有疑问或建议,欢迎评论区留言~