題目描述
彙編語言中有一種移位指令叫做循環左移(ROL),現在有個簡單的任務,就是用字元串模拟這個指令的運算結果。對于一個給定的字元序列S,請你把其循環左移K位後的序列輸出。例如,字元序列S=”abcXYZdef”,要求輸出循環左移3位後的結果,即“XYZdefabc”。是不是很簡單?OK,搞定它!
将字元串先分割再拼接
public class Solution {
public String LeftRotateString(String str,int n) {
if(str==null || str.length()<=1) return str;
int len = str.length();
if(n%len == 0){
return str;
} else{
n%=len;
String s1 = str.substring(0,n);
String s2 = str.substring(n);
str = s2.concat(s1);
return str;
}
}
}
三次反轉的方法
字元串abcdef,n=3,設X=abc,Y=def,是以字元串可以表示成XY,如題幹,問如何求得YX。
假設X的翻轉為XT,XT=cba,同理YT=fed,那麼YX=(XTYT)T,三次翻轉後可得結果。
public class Solution {
public String LeftRotateString(String str,int n) {
if(str==null || str.length()<=1) return str;
int len = str.length();
if(n%len == 0){
return str;
}
char[] ch = str.toCharArray();
reverse(ch,0,n-1);
reverse(ch,n,len-1);
reverse(ch,0,len-1);
return new String(ch);
}
public void reverse(char[] ch,int L,int R){
while(L<R){
char temp = ch[L];
ch[L] = ch[R];
ch[R] = temp;
L++;
R--;
}
}
}