1. 程式人生 > >左旋轉字元(思路與實現)

左旋轉字元(思路與實現)

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

思路:

情況分為兩種:

情況一:首先當我這個左移的位數沒有超過這個字串的長度,這個時候只需要將這個字串的前面左移的拼接到後面去。

情況二:是這個左移的位數超過了這個字元創的長度,這個時候就需要計算,左移後前面真正需要左移多少位。比如一個數12,那麼此時左移7位,這個時候實際移動的是一位,所以需要計算,這裡的計算方法 左移位數n  %  字元序列長度(求餘),那麼就知道真正左移的位數。

所以將上面這個和現在的這個綜合一下,那麼只需要求出正在左移的位置。就可以求出最後結果:

實現(一個是繁瑣的,一個是較簡便的):

public class Solution {
    /*
    這是一種比較麻煩的辦法
    String firstSub;
    String lastSub;
    StringBuffer buffer = new StringBuffer();
    public String LeftRotateString(String str,int n) {
        if(str == null || str.length() == 0){
            return "";
        }
        if(n > str.length()){
            int a = n % str.length();
            firstSub = str.substring(0, a);
            lastSub = str.substring(a);
            buffer.append(lastSub+firstSub);
        }else{
            firstSub = str.substring(0, n);
            lastSub = str.substring(n);
            buffer.append(lastSub+firstSub);
        }
        
        return buffer.toString();
    }
    */
    /*
    這個是一種比較簡便的方法
    */
     public String LeftRotateString(String str,int n) {
         if(str.length() == 0 || str == null){
             return "";
         }
         int length = str.length();
         int index = n % length;
         str += str;
         return str.substring(index, length + index);
     }
}