字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。
比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
获取字符串s[n:]和s[:n],再拼接即可
新建一个[]byte res,用来存储旋转之后的字符集,最终再将其转换成string
利用取余,可以将两步合入一次遍历操作
以n为分隔,前后两部分分别进行旋转,再将整个字符串进行旋转,三次旋转操作顺序可以随意,最终结果一致
func reverseLeftWords1(s string, n int) string {
return s[n:] + s[0:n]
}
func reverseLeftWords2(s string, n int) string {
res := make([]byte, len(s))
for i := n; i < n+len(s); i++ {
res[i-n] = s[i%len(s)]
}
return string(res)
}
func reverseLeftWords3(s string, n int) string {
res := []byte(s)
reverse(res, 0, n-1)
reverse(res, n, len(s)-1)
reverse(res, 0, len(s)-1)
return string(res)
}
func reverse(res []byte, m, n int) {
for m < n {
res[m], res[n] = res[n], res[m]
m++
n--
}
}
KGo笔记
全部评论