劍指offer28

題目描述

彙編語言中有一種移位指令叫作循環左移(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--;
    }
}
複製代碼
相關文章
相關標籤/搜索