題意
給定字符類型的數(shù)組chas和一個(gè)整數(shù)size,把整體為size的左半?yún)^(qū)移到右半?yún)^(qū)去
舉個(gè)例子
ABCDE size=3,這樣的話結(jié)果為DEABC

圖片.png
實(shí)現(xiàn)的代碼如下:
public static void f(String str,int size)
{
char[] chas=str.toCharArray();
rotote(chas,0, size-1);
rotote(chas,size,chas.length-1);
rotote(chas,0,chas.length-1);
System.out.println(String.valueOf(chas));
}
其中的rotote是逆序字符串(一)中的函數(shù),實(shí)現(xiàn)起來非常簡單
解法2
敘述起來較為復(fù)雜,我們通過圖來描述

圖片.png
首先我們來看看如何實(shí)現(xiàn)整體的交換的
我們先來想想要傳入哪些參數(shù)
start end來限定整個(gè)子數(shù)組,size來表示整個(gè)需要交換的子數(shù)組的長度
像 1 2 3 4 5 6 7 A B C D 需要交換的就是ABCD和1234所以size是4
有了這些,我現(xiàn)在就開始來實(shí)現(xiàn)代碼
public static void f(char[] chas,int start,int end,int size)
{
int i=end-size+1;//取得A對(duì)應(yīng)的位置
while(size--!=0)//執(zhí)行size次
{
//交換i和start位置的元素
i++;start++;
}
}
然后就是我們的核心函數(shù)
public static void f(String str,int size)
{
if(str==null||str.length()==0)
{
return;
}
char[] chas=str.toCharArray();
int start=0;
int end=chas.length-1;
int lpart=size;
int rpart=chas.length-size;
int s=Math.min(lpart,rpart);
int d=lpart-rpart;
while(true)
{
exchange(chas,start,end, s);
if(d>0)
{
start+=s;
lpart=d;
}else if(d<0)
{
end-=s;
rpart=-d;
}else
{
break;
}
s=Math.min(lpart,rpart);
d=lpart-rpart;
}
System.out.println(String.valueOf(chas));
}