LeetCode(6):最長の共通プレフィックス

トピック

文字列配列内で最長の共通プレフィックス文字列を検索する関数を記述します

例:文字列配列:leets leetcode leet leeds

一般的なプレフィックス文字列はLeeです

アイデア1

1.最初の
文字列と2番目の文字列を比較し、最も長いもの、つまりリートを見つけます。2。次の文字列と比較します。それでもリートの場合は、次の文字列を比較します。リートでない場合は、最後の桁を削除して取得します。リー、比較

ここに写真の説明を書いてください

public String longestCommonPrefix(String[] strs) {
    if (strs.length == 0) return "";
    String prefix = strs[0];
    for (int i = 1; i < strs.length; i++)
        while (strs[i].indexOf(prefix) != 0) {
            prefix = prefix.substring(0, prefix.length() - 1);
            if (prefix.isEmpty()) return "";
        }        
    return prefix;
}

このアイデアは2つのポイントを学習し
ます
1。1つずつ比較する代わりに、最初の文字列をプレフィックスとして使用して2番目の文字列と比較します2. strs [i] .indexof(prefix)を使用してゼロに等しくします接頭辞を判断するための基礎として、非常に賢い

アイデア2

1.縦方向の比較では、最初の文字列の最初の文字を取り出して、次の3つの文字列の最初の文字と比較します。すべて等しい場合は、不等式
2になるまで2番目の文字の比較を開始します。この比較方法は、カーソルがスライドしているように感じます。移動するとき、条件が満たされないときは、ゼロとカーソルの間の文字がインターセプトされます。これが必要な値です。

ここに写真の説明を書いてください

public String longestCommonPrefix(String[] strs) {
    if (strs == null || strs.length == 0) return "";
    for (int i = 0; i < strs[0].length() ; i++){
        char c = strs[0].charAt(i);
        for (int j = 1; j < strs.length; j ++) {
            if (i == strs[j].length() || strs[j].charAt(i) != c)
                return strs[0].substring(0, i);             
        }
    }
    return strs[0];
}
アイデア3-分割して征服する

ここに写真の説明を書いてください

アイデア:2つに分割し、最も長いプレフィックスを別々に見つけてから、2つのプレフィックスの最後の答えを見つけます

  public static String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) return "";
        return longestCommonPrefix(strs, 0 , strs.length - 1);
    }

    private static String longestCommonPrefix(String[] strs, int l, int r) {
        if (l == r) {
            return strs[l];
        }
        else {
            int mid = (l + r)/2;
            String lcpLeft =   longestCommonPrefix(strs, l , mid);
            String lcpRight =  longestCommonPrefix(strs, mid + 1,r);
            return commonPrefix(lcpLeft, lcpRight);
        }
    }

     static  String  commonPrefix(String left,String right) {
        int min = Math.min(left.length(), right.length());
        for (int i = 0; i < min; i++) {
            if ( left.charAt(i) != right.charAt(i) )
                return left.substring(0, i);
        }
        return left.substring(0, min);
    }

最後のコードをよく理解し、最初にここに記録する必要があります

おすすめ

転載: blog.csdn.net/cd18333612683/article/details/79306737