问题描述:给定一个字符串,把字符串前k个字符移动到尾部。例:字符串“abcdefg”左移3为变成“defgabc”。
解决思路:引入矩阵中(A’B’)’=BA的思想(A’为A的转置矩阵)。比如(abc)’=cba, (defg)’=gfed, (cbagfed)’=defgabc。这样的算法时间复杂度是O(n),空间复杂度是O(1)。
代码如下:
public class Main {
public static void main(String[] args) {
char[] str = "abcdefg".toCharArray();
//时间复杂度O(n)空间复杂度O(1)
leftRotateString(str, 7, 3);
System.out.println(str);
}
public static void reverseString(char[] str, int from, int to) {
while (from < to) {
char c = str[from];
str[from++] = str[to];
str[to--] = c;
}
}
//字符串长度n,循环移动m位
public static void leftRotateString(char[] str, int n, int m) {
m %= n;
reverseString(str, 0, m - 1);
reverseString(str, m, n - 1);
reverseString(str, 0, n - 1);
}
}