力扣链接:
https://leetcode-cn.com/probl...
解题思路:
- 给定一个字符串 s 和一个整数 k,从字符串结尾算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果残余字符少于 k 个,则将残余字符全副反转。如果残余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符放弃原样。
- 这道题其实就是还原题目,解法中有两个条件:(1)每计数2k个字符,那么符合条件,进行判断(2)判断的时候分为两个条件:如果间隔字符完结>=k个字符,那么翻转前k个字符,如果<k,那么翻转残余字符
func reverseStr(s string, k int) string { n := len(s) bs := []byte(s) for i := 0; i < n; i += (2 * k) { if i + k <= n { reverse(bs[i:i+k]) } else { reverse(bs[i:n]) } } return string(bs)}func reverse(s []byte) { n := len(s) low, high := 0, n-1 for low <= high { s[low], s[high] = s[high], s[low] low++ high-- } }