问题描述:
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
限制:1 <= k < s.length <= 10000
例子
示例 1:
输入: s = “abcdefg”, k = 2
输出: “cdefgab”
示例 2:
输入: s = “lrloseumgh”, k = 6
输出: “umghlrlose”
提示:
无
代码实现:
使用片段拼接的方式,按照需要反转的的地方一分为二,再将两个片段重新拼接就可以了
使用遍历拼接字符串的方式,从第n位开始遍历将字符拼接起来,再从头遍历拼接
1.字符串片段拼接:
时间复杂度O(n),空间复杂度O(n)
substrin()方法是将字符串复制一遍,所以时间复杂度位O(n)
public static String reverseLeftWords(String s, int n) {
//substring:获取字符串某一段
return s.substring(n)+s.substring(0,n);
}
2.字符串循环遍历拼接:
时间复杂度O(n),空间复杂度O(n)
public static String reverseLeftWords2(String s, int n) {
StringBuilder sb=new StringBuilder();//拼接字符串容器
for (int i=n;i<s.length()+n;i++){
sb.append(s.charAt(i%s.length())); // 利用取余来减少一个for循环
}
return sb.toString();
}
3.运行结果
题目来源:力扣(LeetCode)
链接: LeetCode题目