【leetcode刷题】剑指 Offer 58 - II. 左旋转字符串
题目描述:
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
请定义一个函数实现字符串左旋转操作的功能。
比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
限制:
1 <= k < s.length <= 10000
解题思路:
本题做法较多,本文主要介绍 “字符串切片” , “列表遍历拼接” , “字符串遍历拼接” 三种方法。
由于本题的多解法涉及到了 字符串为不可变对象 的相关概念,导致效率区别较大。因此,单列一节 三种方法的效率分析 ,望对各位有所帮助。题解链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/mian-shi-ti-58-ii-zuo-xuan-zhuan-zi-fu-chuan-qie-p/
作者:jyd
链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/mian-shi-ti-58-ii-zuo-xuan-zhuan-zi-fu-chuan-qie-p/
来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
注意:本博客非题解,而是在看了Leetcode官网上的题解之后,总结、抽取出相对自己而言“新”的知识点。
一、关于String的详解:
0.参考:
https://www.cnblogs.com/niujifei/p/11303420.html
http://c.biancheng.net/view/830.html
1.String 是引用数据类型,不是基本数据类型。
2.类 String 中包括用于检查各个字符串的方法:比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻译为大写或小写的所有字符的字符串的副本。
下图来自https://www.jb51.net/article/169302.htm
3.string类提取“子字符串(字符串片段)”的方法:
1. 形式一:substring(int beginIndex)
2. 形式二:substring(int beginIndex,int endIndex)
注意,下标以0为起始下标。形式一表示截取范围是[beginIndex,末尾] 。
形式二表示截取范围是[beginIndex, endIndex),注意,是前闭后开
举例见下图
4.由于String的不可变性导致在字符串处理的过程中出现多余的中间值,降低效率,因此出现了StringBuffer和StringBuilder,这两者没太大区别,主要是StringBuffer为线程安全的,而StringBuilder不是。
StringBuffer和StringBuilder参考资料详见:
http://c.biancheng.net/view/5822.html
https://www.runoob.com/java/java-stringbuffer.html
5.string字符串操作比较重要,string类有很多方法可供使用。
其中获取一个string字符串中的某个字符,可以使用下标结合charAt的方法
String str =
"adadsauo"
;
//定义一个字符串为例子
char
fir = str.charAt(
0
);
//获取字符串的第一个字符
char
i= str.charAt(
i
);
//获取字符串的第i个字符