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)
}
|