题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
解法一:(程序员面试金典的解法)
public class Solution {
public String LeftRotateString(String str,int n) {
if(str==null||str.length()==0) return "";
String result=str+str;
return result.substring(n,str.length()+n);
}
}
解法二:(剑指offer的解法)
public class Solution {
public String LeftRotateString(String str,int n) {
if(str==null||str.length()==0) return "";
else if(n==0) return str;
int firstStart=0;
int firstEnd=n-1;
int secondStart=n;
int secondEnd=str.length()-1;
char[] result=str.toCharArray();
reverseString(result,firstStart,firstEnd);
reverseString(result,secondStart,secondEnd);
reverseString(result,firstStart,secondEnd);
return new String(result);
}
void reverseString(char[]result,int start,int end){
for(int i=start;i <= (start + end) / 2;i++){
char temp=result[i];
result[i]=result[end+(start-i)];
result[end+(start-i)]=temp;
}
}
}