题目描述
汇编语言中有一种移位指令叫做循环左移(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;
}
}
}
本文介绍了两种实现字符串循环左移的方法。一种是通过将字符串复制拼接后进行子串截取;另一种则是通过三次反转操作来实现。后者在不使用额外空间的情况下完成循环左移。
416

被折叠的 条评论
为什么被折叠?



