一、题目描述
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串”abcdefg”和数字2,该函数将返回左旋转两位得到的结果”cdefgab”。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
限制:
1 <= k < s.length <= 10000
二、我的题解
1. 最笨重的方法
因为之前的题留下的惯性,我习惯把字符串转换成字节数组 []byte 做处理:
func reverseLeftWords(s string, n int) string {
byte_s := []byte(s)
before_byte_s := []byte{}
reverseLeft_byte_s := []byte{}
for i, char := range byte_s {
if i < n {
before_byte_s = append(before_byte_s, char)
} else {
reverseLeft_byte_s = append(reverseLeft_byte_s, char)
}
}
s_reverseLeft := string(reverseLeft_byte_s)
s_before_byte := string(before_byte_s)
return s_reverseLeft + s_before_byte
}
评判结果:
这样做,由于创建了很多辅助变量,所以非常浪费内存空间,使得我的内存消耗全网最低。
2. 改进的方法
于是我试着去掉一些无用的变量:
直接 索引字符串取字符 来用:
func reverseLeftWords(s string, n int) string {
reverseLeft_byte_s := []byte{}
for i:= n; i<len(s); i++{
reverseLeft_byte_s = append(reverseLeft_byte_s, s[i])
}
for i:= 0; i < n; i++{
reverseLeft_byte_s = append(reverseLeft_byte_s, s[i])
}
return string(reverseLeft_byte_s)
}
输出结果:
这次的内存消耗变低了一点,但是并没有什么卵用:内存消耗还是很高。
可见是方法本身的问题。
3. 最厉害的 – 字符串切片
后来我突然想到,字符串不仅可以直接索引字符,还可以 切片 呀!!!
这不就简单多了么:
func reverseLeftWords(s string, n int) string {
return s[n:] + s[:n]
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118990.html