题目链接: 剑指 Offer 58 - II. 左旋转字符串
题目描述:
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。
比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
解法思路:
- 常规的切片分割思路
代码:
func reverseLeftWords(s string, n int) string {
return s[n:] + s[:n]
}
- 利用反转字符串的思路,先反转前n个,后反转后n个,最后反转整个字符串
代码:
func reverseLeftWords(s string, n int) string {
m := len(s)
if m == 0 {
return ""
}
str := []byte(s)
// 反转后 n 个
reverse(str[:n])
// 反转前 n 个
reverse(str[n:])
// 反转整个串
reverse(str)
return string(str)
}
func reverse(s []byte){
m := len(s)
for i,j := 0,m-1 ;i < j ;i,j = i+1,j-1{
s[i],s[j] = s[j],s[i]
}
}