题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。
要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
解题思路:
a b c d e f 左旋转两位
Step1: 前两位字符逆序,得到:
b a c d e f
Step2: 2~len-1位字符逆序,得到:
b a f e d c
Step 3: 0~len-1位字符逆序,得到:
c d e f a b
Done~
import java.util.Arrays;
public class Q26 {
public static void main(String[] args) {
char[] array = new String("abcdef").toCharArray();
roat(array, 2);
}
public static void roat(char[] array,int size)
{
if(size > array.length)
{
System.out.println("Error!");
return;
}
int i = 0;
int j = size - 1;
char temp;
while(i < j)
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
i = size;
j = array.length - 1;
while(i < j)
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
i = 0;
j = array.length - 1;
while(i < j)
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
System.out.println(Arrays.toString(array));
}
}