1. 程式人生 > >順風2018秋招筆試題

順風2018秋招筆試題

    對稱主義者小A定義了一種“雙節棍字串”:形式如同aa…bb…cc…,其中字元a的個數等於字元c的個數, 字元b的個數小於他們的個數。例如aaabccc,AACMM。給你一個字串,輸出該字串的最長雙節棍子串, 若沒有則輸出NULL,若有多個則輸出最靠前的一個。輸入字串的最長有1000000個字元。  

public class Sontest {
    public static String getString(String str) {
        /*
        思路:
        1.將字串轉換為字元陣列,方便讀取判斷當中的內容
        2.在迴圈中找內容,如果和上一個相同則計數count+1,如果是計數最大值(說明數量最多),則賦值給maxNun儲存,並且將該字元在字串中的index(第一次出現的位置)儲存;
        3.如果i+1 != i,則進行count初始化1,然後繼續上述操作
        4.最後在對i=length-1時,i與i-1的情況進行判斷
         */
        //用來計相同字元的個數
        int count = 1;
        //用來儲存最大字元個數
        int maxNum = 0;
        //獲取字元陣列的長度
        int length = str.length();
        //將字串轉換為字元陣列,用於字元比較
        char[] arr = str.toCharArray();
        //用來儲存擷取的字串
        String newStr = "";
        if (str.length() == 0) {
            System.out.println("NULL");
        } else if (str.length() < 1000000) {
            //用來記錄當前字元的位置
            int index = 0;
            for (int i = 0; i < length - 1; i++) {
                //相等則加1
                if (String.valueOf(arr[i]).equals(String.valueOf(arr[i + 1]))) {
                    count++;
                    //如果count計數比最大記錄數大
                    if (count != 1 && count > maxNum) {
                        //獲取當前索引位置
                        index = str.indexOf(arr[i]);
                        maxNum = count;
                    }
                } else {
                    //當兩者不相等時,初始化count,進行下一次迴圈比較
                    count = 1;
                }
                if (i == length - 1 && String.valueOf(arr[i]).equals(String.valueOf(arr[i - 1]))) {
                    count++;
                }
            }
            //substring(0,2)表示從索引0擷取到索引2
            newStr = str.substring(index, index + maxNum);
        }
        return newStr;

    }


    public static void main(String[] args) {
        String t = "ssssdddaa";
        String t1 = "sssdddaa";
        String t2 = "ssssdddddaa";
        String t3 = "ssssdddaaaaa";

        System.out.println(getString(t));
        System.out.println(getString(t1));
        System.out.println(getString(t2));
        System.out.println(getString(t3));

    }
}

輸出結果:

ssss
sss
ddddd
aaaaa

Process finished with exit code 0

可能還有些許不全面的部分,但是具體思路是這樣的,如果有不同的或錯誤的謝謝提出。