[Leetcode] 14:最長の共通プレフィックス

[Leetcode] 14:最長の共通プレフィックス
文字列配列内で最も長い共通プレフィックスを見つける関数を記述します。

共通のプレフィックスがない場合は、空の文字列 ""が返されます。

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"
示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

説明:

すべてのエントリには小文字のazのみが含まれます。

回答

この質問は比較的単純ですが、簡単な質問ができたとしても、うまくできるとは限りません。私は多くの人がこれをするかもしれないと思います:

1.最初にstr1とstr2の共通文字列s1を見つけます(注:str1は最初の文字列を表し、str2は2番目の文字列を表します)。

2.次に、s1とstr3の共通のプレフィックスs2を見つけます。

3.次に、s2とstr4の共通プレフィックスs3を見つけます。

4.変数を使用して、2つの文字列間の共通のプレフィックスを格納し、このように繰り返し繰り返します。

この方法は最も考えやすい方法ですが、特に良い方法ではありません。実際、これを行うことができます。1つの文字列を水平方向に1つずつ移動する代わりに、垂直方向のアプローチを使用します。たとえば、この["flower"、 "flow"、 "flight"]の場合。2次元の文字配列として扱います

f l o w e r
f l o w
f l i g h t

次に、縦方向にトラバースし、列ごとにトラバースします。特定の列に別の文字が表示されている限り、トラバースは終了します。たとえば、上記の例では、3番目の列が異なって表示されるため、トラバースが終了し、最初の2列が返されます。コードは次のように表示されます。


    public static String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length <= 0) {
            return "";
        }
        String s = "";
        for (int j = 0; j < strs[0].length(); j++) {
            char c = strs[0].charAt(j);
            // 开始纵向遍历
            for (int i = 1; i < strs.length; i++) {
                if (j >= strs[i].length() || c != strs[i].charAt(j)) {
                    return s;
                }
            }
            s += c;
        }
        return s;
    }

過去

[Leetcode] 13:ローマ数字から整数

[Leetcode] 14:最長の共通プレフィックス

QRコード

おすすめ

転載: blog.51cto.com/15015171/2555006