条件描述:对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。
①首先判断左移位数K与字符序列长度的关系;
②分析"abcXYZdef"左移成"XYZdefabc"的过程:
a.首先翻转前n位字符序列;
b.再翻转剩下的字符序列;
c.最后翻转所有字符序列得到左移K位后的字符序列。
//循环左移n位字符串
public String leftremove(String str, int n){
//判断输入字符串的合法性
if (str == null || str.length()==0)
return "";
int len = str.length();
//当n大于len时,则左移的位数为n%len
//当n小于等于len时,左移的位数为n(还是n%len)
int leftre = n%len;
char[] arrstr = str.toCharArray();
//AbcDFs-->左移3位得到-->DFsAbc
//1.翻转Abc->cbA
//2.翻转DFs->sFD,-->cbAsFD
//3.翻转cbAsFD->DFsAbc
restr(arrstr,0,n-1);
restr(arrstr,n,len-1);
restr(arrstr,0,len-1);
return new String(arrstr);
}
//字符串翻转函数
public void restr(char[] arrstr,int i, int j){
while (j>i){
char tmp = arrstr[i];
arrstr[i] = arrstr[j];
arrstr[j] = tmp;
++i;
--j;
}
}