题目
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例
输入:s = “abcdefg”, k = 2
输出:“bacdfeg”
解析
本题没有什么明显的算法,主要是模拟出题目条件
func reverseStr(s string, k int) string {
// 因为入参给的是string,需要转成[]byte
res := []byte(s)
length := len(s)
for i:=0; i <= length-1; i = i + 2*k {
// 表示当前的位置 + k个字符后,还没到字符串结束,就属于反转前k的那种
if i + k <= length { //反转每2k中的前k个
reverse(res[i: i+k])
} else { //反转最后不满足k的个剩余部分
reverse(res[i: length]) // 这里不要减一,因为调用的reverse函数里减了
}
}
return string(res)
}
func reverse(b []byte) {
left := 0
right := len(b) - 1
for left < right {
b[left], b[right] = b[right], b[left]
left++
right--
}
}