【Java】 劍指offer(58-2) 左旋轉字符串

 

本文參考自《劍指offer》一書,代碼採用Java語言。html

更多:《劍指Offer》Java實現合集  java

題目

  字符串的左旋轉操做是把字符串前面的若干個字符轉移到字符串的尾部。請定義一個函數實現字符串左旋轉操做的功能。好比輸入字符串"abcdefg"和數字2,該函數將返回左旋轉2位獲得的結果"cdefgab"。函數

思路

  最初的想法是令chars[i] = chars[i+n],將後面的數字都往前移,最後面空出的位置放入前面的數字,如abcdef,n=2時,將c放入a的位置,e放入c的位置,a放入e的位置,b也同理,就能夠獲得cdefab了。可是這沒有考慮到最後空出的位置是否正確,例如abcdefg中,一樣的方法將會獲得cdeba,答案錯誤,就是由於後面的位置對應不上。思路錯誤!post

  正確思路:本題思路和上一道題翻轉單詞順序的原理如出一轍,只是上一道題有空格,這道題沒空格,其實這道題還更簡單。先分別翻轉前半部分字符串和後半部分字符串,最後翻轉整個字符串便可。測試

 

測試算例 url

  1.功能測試(對長度爲n的字符串,左旋轉-1,0,1,2,n-1,n,n+1位)htm

  2.邊界值測試(null)blog

Java代碼

//題目:字符串的左旋轉操做是把字符串前面的若干個字符轉移到字符串的尾部。
//請定義一個函數實現字符串左旋轉操做的功能。好比輸入字符串"abcdefg"和數
//字2,該函數將返回左旋轉2位獲得的結果"cdefgab"。

public class LeftRotateString {
    public String leftRotateString(char[] chars,int n) {
        if(chars==null ||chars.length<=0)
            return String.valueOf(chars);
        if(n<=0 || n>chars.length)
            return String.valueOf(chars); 
        reverse(chars,0,n-1);
        reverse(chars,n,chars.length-1);
        reverse(chars,0,chars.length-1);
        return String.valueOf(chars);
    }
    
    private void reverse(char[] chars, int start,int end){
        while(start<end){
            char temp=chars[start];
            chars[start]=chars[end];
            chars[end]=temp;
            start++;
            end--;
        }
    }
}

  

收穫

  1.這道題看似是移動字符,實際上是翻轉字符串實現的,要記住這類方法。知識遷移能力呀!字符串

  

更多:《劍指Offer》Java實現合集  get

相關文章
相關標籤/搜索