劍指offerNo43. 左旋轉字符串(Java)

題目描述:

彙編語言中有一種移位指令叫做循環左移(ROL),現在有個簡單的任務,就是用字符串模擬這個指令的運算結果。對於一個給定的字符序列S,請你把其循環左移K位後的序列輸出。例如,字符序列S=”abcXYZdef”,要求輸出循環左移3位後的結果,即“XYZdefabc”。是不是很簡單?OK,搞定它!

思路:

思路1:

  • 循環左移,左移最多的情況就是整個字符序列全部左移動,全部左移動之後爲:abcXYZdefabcXYZdef。
  • 因此,我們可以使得字符序列爲雙倍長,爲abcXYZdefabcXYZdef,左移n,那麼我們就可以直接從序列的n位置開始截取,截止到原序列長度+n。
  • 比如該序列長度爲9,需要左移動3,那麼序列中“abcXYZdefabcXYZdef”的(3,12)就是我們左移之後的。即XYZdefabc

代碼:

package offer01;

public class TestNo43 {
    public static void main(String[] args) {
        String a = "abcdfer";
        System.out.println(new TestNo43().LeftRotateString(a,3));
    }
    public String LeftRotateString(String str,int n) {
        if(str==null || str.length() == 0){
            return str;
        }
        //雙倍長度
        String doubleStr = str+str;
        if(n<=doubleStr.length()){
            return doubleStr.substring(n,str.length()+n);
        }else{
            return "";
        }
    }
}

思路2:

對於序列S=”abcXYZdef”,n = 3:

  • 先對序列n之後的部分進行翻轉得到序列S="cbaXYZdef".
  • 再對序列n之後的部分進行翻轉得到序列S="cbafedZYX".
  • 最後對整個序列進行翻轉得到序列S="XYZdefabc".

代碼:

package offer01;

public class TestNo43_1 {
    public static void main(String[] args) {
        String a = "abcdfer";
        System.out.println(new TestNo43().LeftRotateString(a,3));

    }
    public String LeftRotateString(String str,int n) {
        if(str == null || str.length() == 0){
            return str;
        }
        char[] charArray = str.toCharArray();
        //翻轉n之前的部分
        reverse(charArray,0,n-1);
        //翻轉n之後的部分
        reverse(charArray,n,charArray.length-1);
        //整體進行翻轉
        reverse(charArray,0,charArray.length-1);
        return String.valueOf(charArray);
    }
    //翻轉部分
    private void reverse(char[] array,int start,int end){
        char temp = ' ';
        while (start<end){
            temp = array[start];
            array[start++] = array[end];
            array[end--] = temp;
        }
    }
}

 

你是朵花,才覺得春天會永遠離開你
                             如果你是春天,就永遠有花  ..

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章