題目:左旋轉字符串
題目描述
彙編語言中有一種移位指令叫做循環左移(ROL),現在有個簡單的任務,就是用字符串模擬這個指令的運算結果。對於一個給定的字符序列S,請你把其循環左移K位後的序列輸出。例如,字符序列S=”abcXYZdef”,要求輸出循環左移3位後的結果,即“XYZdefabc”。是不是很簡單?OK,搞定它!
解題思路:
以S=”abcXYZdef”,要求輸出循環左移3位後的結果爲例:
首先我們可以將這個字符串分爲兩個部分:
(1)前三個字符爲第一部分,abc
(2) 後面的字符爲另外一個部分。XYZdef
分別將這兩個部分進行反轉,得到cba和fedZYX,再將這兩個共同組成的字符串進行反轉cbafedZYX–>XYZdefabc.即得到最終結果。
代碼實現:
import java.util.*;
public class Solution {
public String LeftRotateString(String str,int n) {
if(str==null || str.length()<=0) {
return str;
}
char [] chs=str.toCharArray();
int k=n%(str.length());
//首先反轉前面的k位
swap(chs,0,k-1);
//反轉後面的k-str.length-1
swap(chs,k,chs.length-1);
//整體的字符串進行反轉
swap(chs,0,chs.length-1);
//System.out.println(Arrays.toString(chs));
return new String(chs);
}
private static void swap(char[] chs, int start, int end) {
while(start<end) {
char temp=chs[start];
chs[start]=chs[end];
chs[end]=temp;
start++;
end--;
}
}
}