实现功能:实现字符串的移位操作
详述: 例如,“abcdefgh”循环右移5位得到“defghabc”
方法一:按位右移(空间复杂度O(1); 时间复杂度O(n*n))
移动1位:habcdefg
移动2位:ghabcdef
移动3位:fghabcde
移动4位:efghabcd
移动5位:defghabc
方法二:按移动位置切片(空间复杂度O(n);时间复杂度O(n))
“abcdefgh”切成“abc”和”defgh”,然后将“abc”append到“defgh”后面,得到“defghabc”
方法三:反转 + 反转 + 反转
找到反转位置后,
将“abc”反转成“cba”
将“defgh”反转成“hgfed”
当前字符串变为“cbahgfed”,再将此字符串整体反转变为“defghabc”得到结果。
代码如下:
public class Main {
/**
* @param args
* abcdefgh 循环右移5位,转为 defghabc 要求时间复杂度O(n),空间复杂度O(1)
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "12345";
int n = s.length() - 5;//要反转的位数
char[] c = s.toCharArray();
System.out.println(reverse(c, 0, n - 1));
System.out.println(reverse(c, n, c.length - 1));
System.out.println(reverse(c, 0, c.length - 1));
}
public static char[] reverse(char[] c, int beginI, int endI){
char tmp ;
for(int i = 0; i < endI - beginI; i ++){
tmp = c[beginI];
c[beginI] = c[endI];
c[endI] = tmp;
beginI ++;
endI --;
}
return c;
}
}