您的位置:首页 > 编程语言 > Java开发

字符串循环移位

2016-05-13 09:07 495 查看
问题描述:给定一个字符串,把字符串前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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 字符串 java