题意
给定字符类型的数组chas和一个整数size,把整体为size的左半区移到右半区去
举个例子
ABCDE size=3,这样的话结果为DEABC
图片.png
实现的代码如下:
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是逆序字符串(一)中的函数,实现起来非常简单
解法2
叙述起来较为复杂,我们通过图来描述
图片.png
首先我们来看看如何实现整体的交换的
我们先来想想要传入哪些参数
start end来限定整个子数组,size来表示整个需要交换的子数组的长度
像 1 2 3 4 5 6 7 A B C D 需要交换的就是ABCD和1234所以size是4
有了这些,我现在就开始来实现代码
public static void f(char[] chas,int start,int end,int size)
{
int i=end-size+1;//取得A对应的位置
while(size--!=0)//执行size次
{
//交换i和start位置的元素
i++;start++;
}
}
然后就是我们的核心函数
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));
}
网友评论