旋转字符串

来源:互联网 发布:windows phone8.1刷机 编辑:程序博客网 时间:2024/05/29 16:09
旋转字符串
【题目】
给定一个字符类型的数组 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);    }}

0 0