题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
代码一
思想
使用函数,不推荐
// public static String LeftRotateString(String str,int n) {
// String beginstr;
// String endstr;
// if(str.length()>1) {
// beginstr = str.substring(0, n);
// endstr = str.substring(n, str.length());
// str = endstr+beginstr;
// }
// return str;
//
// }
代码二
思想
使用队列,eclipse可以但是牛客网上编译不通过
public static String LeftRotateString(String str,int n) {
Queue<String> q = new LinkedList<String>();
String newStr="";
String[] arrayStr = str.split("");
for(String s:arrayStr)
{
q.offer(s);
}
for(int i=0;i<n;i++) {
String temp = q.poll();
q.offer(temp);
}
while(!q.isEmpty()) {
newStr += q.poll();
}
return newStr;
}
代码三
思想
只可臆想不可言传
public String LeftRotateString(String str,int n) {
if(str.length()<=1)return str;
int len = str.length();
n=n%len;//防止n过大越界
str+=str;
return str.substring(n,len+n);
}