跳到主要内容

541. 反转字符串 II

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例 1:

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

示例 2:

输入:s = "abcd", k = 2
输出:"bacd"

双指针 + 模拟

没啥好说的

func reverse(b []byte, l, r int) []byte {
for l <= r {
b[l], b[r] = b[r], b[l]
l++
r--
}
return b
}

func reverseStr(s string, k int) string {
b := []byte(s)
curLen := 0
for curLen < len(s) {
if curLen+2*k > len(s) {
if len(s)-curLen > k {
b = reverse(b, curLen, curLen+k-1)
} else {
b = reverse(b, curLen, len(s)-1)
}
return string(b)
} else {
b = reverse(b, curLen, curLen+k-1)
curLen += k * 2
}
}
return string(b)
}