0541. 反转字符串 II
大约 2 分钟
---
0541. 反转字符串 II
- 标签:双指针、字符串
- 难度:简单
题目链接
题目大意
描述:
给定一个字符串 和一个整数 。
要求:
从字符串开头算起,每计数至 个字符,就反转这 字符中的前 个字符。
- 如果剩余字符少于 个,则将剩余字符全部反转。
- 如果剩余字符小于 但大于或等于 个,则反转前 个字符,其余字符保持原样。
说明:
- 。
- 仅由小写英文组成。
- 。
示例:
- 示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"- 示例 2:
输入:s = "abcd", k = 2
输出:"bacd"解题思路
思路 1:分段反转
按照题目要求,每 个字符为一组进行处理:
- 对于每组的前 个字符进行反转
- 后 个字符保持原样
具体实现:
- 遍历字符串,每次步进 个字符
- 对于每个区间 :
- 如果剩余字符 ,反转前 个字符(即 )
- 如果剩余字符 ,反转所有剩余字符
思路 1:代码
class Solution:
def reverseStr(self, s: str, k: int) -> str:
s_list = list(s)
n = len(s_list)
# 每次处理 2k 个字符
for i in range(0, n, 2 * k):
# 确定反转的右边界:取 min(i + k, n)
left = i
right = min(i + k - 1, n - 1)
# 反转 [left, right] 区间
while left < right:
s_list[left], s_list[right] = s_list[right], s_list[left]
left += 1
right -= 1
return ''.join(s_list)思路 1:复杂度分析
- 时间复杂度:,其中 是字符串长度,需要遍历字符串一次。
- 空间复杂度:,需要将字符串转换为列表进行操作。