Example
Given "abcdefg"
.
offset=0 => "abcdefg"
offset=1 => "gabcdef"
offset=2 => "fgabcde"
offset=3 => "efgabcd"
第一种方法:
新建一个数组,将字符串按照格式要求一次放进去即可 但是这个方法消耗的额外的空间比较大
public class eight {
public static void main(String[] args) {
// TODO Auto-generated method stub
int n =13;
char[] ch = {'a','b','c','d','e','f','g'};
System.out.println(RotateString(3,ch));
}
public static char[] RotateString(int n,char[] str)
{
int len = str.length;
char[] ch = new char[len];
int i = 0;
n %= len;
for(int j = len-n;j<len;j++)
{
System.out.println(str[j]);
ch[i]= str[j];
i++;
}
for(int j =0;j<len-n;j++)
{
ch[i]= str[j];
i++;
}
return ch;
}
}
第二种方法
三次反转法
public static char[] RotateString(int offset,char[] str)
{
int len = str.length;
offset %=len;
reverse(str,0,len-offset-1);//第一次将要放到数组最前面的反转
reverse(str,len-offset,len-1);//第二次将剩余的反转
reverse(str,0,len-1);//将整个数组反转 其实这一步的反转放到最前面作为第一次反转也是一样的
return str;
}
public static void reverse(char[] str, int start,int end)
{
int i = start;
int j = end;
for (;i<j;i++,j--)
{
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
}