彙編語言中有一種移位指令叫作循環左移(ROL),如今有個簡單的任務,就是用字符串模擬這個指令的運算結果。對於一個給定的字符序列S,請你把其循環左移K位後的序列輸出。例如,字符序列S=」abcXYZdef」,要求輸出循環左移3位後的結果,即「XYZdefabc」。是否是很簡單?OK,搞定它java
這道題跟咱們上道題其實很像,都是反轉字符串的問題,一樣的都得注意總體反轉以後的局部處理,直接上代碼吧工具
public String leftRotateString(String str, int n) {
if (str == null || str.length() < n) {
return null;
}
char[] chars = str.toCharArray();
int length = chars.length;
//先總體反轉
reverse(chars, 0, length - 1);
//而後反轉前面的字符,就是出去須要n個以後的那些字符
reverse(chars, 0, length - n - 1);
//最後反轉後面n個字符
reverse(chars, length - n, length - 1);
return String.valueOf(chars);
}
//總體反轉的工具類
private void reverse(char[] chars, int low, int high) {
while (low < high) {
char temp = chars[low];
chars[low] = chars[high];
chars[high] = temp;
low++;
high--;
}
}
複製代碼