编程珠玑第二章旋转字符串,abcdefg向左旋转3位,变为defgabc,书中的思想是分三步,实现字符串的旋转
实现代码如下
package org.waitingfortime.编程珠玑.c2;
/**
* Created by IntelliJ IDEA.
* User: mazhiyuan
* Date: 12-10-25
* Time: 下午6:39
* 编程珠玑第二章,向左旋转字符串
*/
public class ReverseString {
public static char[] reverse(char[] chars, int i) {
if (i <= 0)
throw new IllegalArgumentException("i must be greater than 0");
i = i % chars.length;
//first step
_reverse(chars, 0, i - 1);
//second step
_reverse(chars, i, chars.length - 1);
//third step
_reverse(chars, 0, chars.length - 1);
return chars;
}
private static void _reverse(char[] chars, int b, int e) {
while (b <= e) {
swap(chars, b, e);
b++;
e--;
}
}
private static void swap(char[] chars, int b, int e) {
char temp = chars[b];
chars[b] = chars[e];
chars[e] = temp;
}
public static void main(String[] args) {
char c[]={'a','b','c','d','e','f','g','h','i'};
System.out.println(java.util.Arrays.toString(ReverseString.reverse(c,5)));
}
}
结果输出为
[f, g, h, i, a, b, c, d, e]
看到结果后我发现这个其实就是将前n个字符截取后拼接到后面么,干嘛还要分三步呢。。。
难道是我没理解旋转的含义么