题目链接:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
解题思路:
abc——>cba
XYZdef——>fedZYX
abcXYZdef——>cbafedZYX
cbafedZYX——>XYZdefabc
1 public class Solution { 2 public String LeftRotateString(String str,int n) { 3 char[] chars = str.toCharArray(); 4 if(chars.length < n) return ""; 5 reverse(chars, 0, n-1); 6 reverse(chars, n, chars.length-1); 7 reverse(chars, 0, chars.length-1); 8 StringBuilder sb = new StringBuilder(chars.length); 9 for(char c:chars){ 10 sb.append(c); 11 } 12 return sb.toString(); 13 } 14 15 public void reverse(char[] chars,int low,int high){ 16 char temp; 17 while(low<high){ 18 temp = chars[low]; 19 chars[low] = chars[high]; 20 chars[high] = temp; 21 low++; 22 high--; 23 } 24 } 25 }