题目描述

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

代码一

思想
使用函数,不推荐

  1. // public static String LeftRotateString(String str,int n) {
  2. // String beginstr;
  3. // String endstr;
  4. // if(str.length()>1) {
  5. // beginstr = str.substring(0, n);
  6. // endstr = str.substring(n, str.length());
  7. // str = endstr+beginstr;
  8. // }
  9. // return str;
  10. //
  11. // }

代码二
思想
使用队列,eclipse可以但是牛客网上编译不通过

  1. public static String LeftRotateString(String str,int n) {
  2. Queue<String> q = new LinkedList<String>();
  3. String newStr="";
  4. String[] arrayStr = str.split("");
  5. for(String s:arrayStr)
  6. {
  7. q.offer(s);
  8. }
  9. for(int i=0;i<n;i++) {
  10. String temp = q.poll();
  11. q.offer(temp);
  12. }
  13. while(!q.isEmpty()) {
  14. newStr += q.poll();
  15. }
  16. return newStr;
  17. }

代码三

思想
只可臆想不可言传

  1. public String LeftRotateString(String str,int n) {
  2. if(str.length()<=1)return str;
  3. int len = str.length();
  4. n=n%len;//防止n过大越界
  5. str+=str;
  6. return str.substring(n,len+n);
  7. }