要求
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
- 如果剩余字符少于 k 个,则将剩余字符全部反转。
- 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
示例 2:
输入:s = "abcd", k = 2
输出:"bacd"
提示:
- 1 <= s.length <= 104
- s 仅由小写英文组成
- 1 <= k <= 104
核心代码
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
解题思路:这个题主要考察的是列表的切片功能,我们定义left,mid,right,不断循环遍历,在遍历过程中反转left~mid的字符串,比较简单。