题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
解题思路
public class Solution {
//解法1:利用java内置函数,较简单
public String LeftRotateString(String str,int n)
{
int len=str.length();
if(len==0)
return "";
n=n%len; //即n是可以大于len的,取模即可,例如n=3,len=2,"ab"->ba
String s=str+str;
return s.substring(n,n+len);
}
/* //解法2:字符串交换, 交换【0, n - 1】,
// 交换【n, len-1】,
// 交换【0, len-1】
public String LeftRotateString(String str,int n)
{
if(str.length()==0)
return "";
//转换为字符串数组
char[]ch=str.toCharArray();
//左移n位,则先反转交换 0~n-1下标的字符
reverse(ch,0,n-1);
//交换剩下的字符,即下标n~len-1字符
reverse(ch,n,ch.length-1);
//整体来个交换,即下标0~len-1字符
reverse(ch,0,ch.length-1);
return new String(ch);
}
private void reverse(char[]ch,int i,int j){
while(i<j){
char temp=ch[i];
ch[i]=ch[j];
ch[j]=temp;
i++;
j--;
}
}*/
}