问题描述:
实现字符串的移位:比如abcdefg,移动前三位变成defgabc.
从数学角度分析问题:
假设向量A=abc,向量B=defg,移动前的字符串可表示为AB,移动后可表示为BA;那么向量BA是如何得到的呢?可以从矩阵的角度来分析(向量是维度为一的矩阵)。分别对A和B求逆之后再对A的逆和B的逆求逆即可得到矩阵BA:
对于向量来说,求逆就是将它前后翻转;所以只需实现字符串的翻转,即可完成对字符串的移位操作。
下面来看代码的实现:
public class ShiftString {
public static void main(String[] args) {
String[] str = { "a", "b", "c", "d", "e", "f", "g" };
int index = 3;
shift(str, index);
for (String s : str) {
System.out.print(s);
}
}
public static void shift(String[] str, int index) {
reverse(str, 0, index - 1);
reverse(str, index, str.length - 1);
reverse(str, 0, str.length - 1);
}
public static void reverse(String[] str, int start, int end) {
while (start < end) {
String temp;
temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
}