旋转字符串
【题目】
给定一个字符类型的数组 chas 和一个整数 size,请把大小为 size 的左半区整 体移到右半区,右半区整体移到左边。
【举例】
如果把 chas 看作字符串为"ABCDE",size=3,调整成"DEABC"。
【要求】
【题目】
给定一个字符类型的数组 chas 和一个整数 size,请把大小为 size 的左半区整 体移到右半区,右半区整体移到左边。
【举例】
如果把 chas 看作字符串为"ABCDE",size=3,调整成"DEABC"。
【要求】
如果 chas 长度为 N,两道题都要求时间复杂度为 O(N),额外空间复杂度为 O(1)。
代码:
/*将字符串分成左右两部分 * 左边旋转 右边旋转 整体旋转*/ public static void revere(char[] str,int size){ int left = 0; int right = size-1; while(left<right){ str[left]= (char) ((int)str[left]^(int)str[right]);//字符交换 str[right]= (char) ((int)str[left]^(int)str[right]); str[left]= (char) ((int)str[left]^(int)str[right]); left++; right--; } left = size; right = str.length-1; while(left<right){ str[left]= (char) ((int)str[left]^(int)str[right]); str[right]= (char) ((int)str[left]^(int)str[right]); str[left]= (char) ((int)str[left]^(int)str[right]); left++; right--; } left = 0; right = str.length-1; while(left<right){ str[left]= (char) ((int)str[left]^(int)str[right]); str[right]= (char) ((int)str[left]^(int)str[right]); str[left]= (char) ((int)str[left]^(int)str[right]); left++; right--; } for (char c:str) { System.out.print(c); } }