【Leetcode专题[字符串]-541-反转字符串II】力扣链接:
https://leetcode-cn.com/probl...
解题思路:
- 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
- 这道题其实就是还原题目,解法中有两个条件:(1)每计数2k个字符,那么符合条件,进行判断(2)判断的时候分为两个条件:如果距离字符结束>=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--
}
}
推荐阅读
- Leetcode专题[数组]-40-组合总和II
- Golang开发常见的57个错误
- 【golang】leetcode中级-字母异位词分组&无重复字符的最长子串
- 彻底理解Golang Map
- kratos线上开源年会它来啦~
- 深入浅出 Golang 资源嵌入方案(go-bindata篇)
- 深入浅出 Golang 资源嵌入方案(前篇)
- golang 经典案例总结
- Go实战 | 基于有向无环图的并发执行流的实现