剑指 Offer 58 - II. 左旋转字符串
剑指 Offer 58 - II. 左旋转字符串
题目
链接
https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
问题描述
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例
输入: s = "abcdefg", k = 2
输出: "cdefgab"
提示
1 <= k < s.length <= 10000
思路
转置,转置头部,尾部,和整体,三次转置。
因为String不可变,所以需要申请额外空间,如果可变的话就不需要了。
复杂度分析
时间复杂度 O(n)
空间复杂度 O(n)
代码
Java
public static void reverse(char[] ch, int start, int end) {
while (start<=end){
char tmp = ch[start];
ch[start] = ch[end];
ch[end] = tmp;
start++;
end--;
}
}
public static String reverseLeftWords(String s, int n) {
char[] ch =s.toCharArray();
int len = ch.length;
reverse(ch,0,n-1);
reverse(ch,n,len-1);
reverse(ch,0,len-1);
String ans = "";
for (char q : ch) {
ans += q;
}
return ans;
}