最長公共字首

tw_nlp發表於2024-05-24

問題描述:

編寫一個函式來查詢字串陣列中的最長公共字首。

樣例輸入:

["abca","abc","abca","abc","abcc"]

樣例輸出:

"abc"

程式碼:

 public static void main(String[] args) {

        // 測試
        Scanner sc = new Scanner(System.in);
        System.out.println("Please input five strings !");
        String[] strings = new String[5];
        while(true){
            for (int i=0; i<5; i++){
                strings[i] = sc.next();
            }
            System.out.println(maxPreStr(strings));
        }

    }

    // 求一個字串陣列的各個字串的最長公共字首
    private static String maxPreStr(String[] strs){
        // 判斷strs是否合法
        if(strs.length<=0){
            return "";
        }
        StringBuilder sb = new StringBuilder();
        for (int i=0; i<strs[0].length(); i++){ // i的取值範圍是strs陣列中第一個字串的長度
            char c = strs[0].charAt(i); // 逐個讀取第一個字串的字元
            for (int j=1; j<strs.length; ){ // 從陣列中的第二個字串開始比較
                // 判斷下一個字串的長度是否合法,防止字串長度越界,讀取除第一個字串之後的字串的第一個字元
                if(strs[j].length()>i && strs[j].charAt(i)==c){
                    j++; // 接著讀取下一個字串的字元
                }else{
                    // 如果有字串不滿足上述條件,則將sb中的內容返回出去即可
                    // 判斷一下sb的內容是否為空,若為空則輸出 null
                    return sb.length()==0 ? "" : sb.toString();
                }
            }
            sb.append(c);
        }
        // 輸出sb中的內容
        return sb.toString();
    }

結果:

注意最後一行有一個空格表示“”,此時表示沒有公共字首
在這裡插入圖片描述

相關文章