541. 反转字符串II
给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = “abcdefg”, k = 2
输出: “bacdfeg”
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 28 29 30 31 32 33 34
| func reverseString(str string, k int) string { count := len(str) / (2 * k) if count >= 1 { length := count * (2 * k) index := 0 for temp := count; temp > 0; temp-- { runes := reverse(str, index, index+k-1) str = string(runes) index += (2 * k) } if len(str)-length >= k { return string(reverse(str, length, length+k-1)) } return str } else if len(str) >= k { return string(reverse(str, 0, k-1)) } else { return string(reverse(str, 0, len(str)-1)) } }
func reverse(strr string, begin int, end int) []rune { str := []rune(strr) for begin < end { str[begin], str[end] = str[end], str[begin] begin++ end-- } return str }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| func reverseString(s string, k int) string { sArr := []byte(s) length := len(s) for i := 0; i < length; i += 2 * k { if i+k < length { reverse(sArr[i : i+k]) } else { reverse(sArr[i:length]) } } return string(sArr) }
func reverse(arr []byte) { left := 0 right := len(arr) - 1 for left < right { arr[left], arr[right] = arr[right], arr[left] left++ right-- } }
|