给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2 输出:"bacdfeg" 示例 2:
输入:s = "abcd", k = 2 输出:"bacd"
提示:
1 <= s.length <= 104 s 仅由小写英文组成 1 <= k <= 104
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/reverse-string-ii
- 判断[当前索引位置, 当前索引位置+k]是否在字符串范围内
- 如果在,仅翻转前k个
- 如果不在,全部翻转
- 提供一个字符串的翻转函数
func reverseStr(s string, k int) string {
ss := []byte(s)
for curIndex:=0; curIndex<len(s); curIndex+=2*k {
if curIndex+k < len(s) {
reverse(ss[curIndex:curIndex+k])
} else {
reverse(ss[curIndex:len(s)])
}
}
return string(ss)
}
func reverse(ss []byte) {
left, right := 0, len(ss)-1
for left < right {
ss[left], ss[right] = ss[right], ss[left]
left++
right--
}
}