题目:
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
- 如果剩余字符少于
k个,则将剩余字符全部反转。 - 如果剩余字符小于
2k但大于或等于k个,则反转前k个字符,其余字符保持原样。
算法:
方法一:模拟
func reverseStr(s string, k int) string {
arr := []byte(s)
start := 0
flag := 1
for i := 0; i < len(s); i ++ {
if i != 0 && i % k == 0 {
if flag == 1 {
revert(arr, i - k, i - 1)
}
flag = -1 * flag
if flag == 1 {
start = i
}
}
}
if flag == 1 {
revert(arr, start, start + k - 1)
}
return string(arr)
}
func revert(arr []byte, start, end int) {
if end >= len(arr) {
end = len(arr) - 1
}
for start < end {
arr[start], arr[end] = arr[end], arr[start]
start ++
end --
}
fmt.Println(string(arr))
}