https://leetcode-cn.com/problems/reverse-string-ii/
模拟。
双指针: left 和 right 分别指向每次要反转的字符串的头和尾, 然后调用 swap 函数原地交换字符串。
- left 每次走 2 * k 步, right 为每 k 个字符, swap [left, right]
- 当剩余字符不足 k 个时, 说明已经走到字符串尾部了, 取 min(right, len(s) - 1) 然后 swap 就可以啦。
class Solution:
def reverseStr(self, s: str, k: int) -> str:
s = list(s)
for left in range(0, len(s), 2 * k):
right = left + k - 1
s = self.swap(left, min(right, len(s) - 1), s)
return ''.join(s)
def swap(self, left, right, s):
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
return s- 时间复杂度: O(n)
- 空间复杂度: O(1)
