541. 反转字符串 II

541. 反转字符串 II

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

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

示例 1:

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

示例 2:

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

双指针 + 模拟

没啥好说的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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)
}