72個の質問LeetCode:編集距離(難しいです)

72個の質問LeetCode:編集距離(難しいです)

  • タイトル:、WORD1が使用WORD2変換操作の最小数を計算するためにWORD1とWORD2二つの単語が与えられます。あなたは一つの単語の上に、以下の3つの操作を行うことができます。文字を挿入、文字を削除し、文字を置き換えます

  • Aは考えた:①動作させるために、比較ビットを考え始めます。しかし、アイデアは例が不合理挙げることができる非常に簡単です。②その後、各文字の場所について検索し、落ち着くために、他の場所は行動の必要性がなく、適切な場所を選択します。しかし、いくつかの文字が存在することも、挿入する必要はありません。Soが 私は、私はないと思います。

  • アイデアII:解釈は、[J] [i]のDPを有する、動的プログラミングの概念に与えられているj個のビットが必要とする前に、私はステップのWORD1 WORD2番号なる前にビットを表します。最後のものは、同じである、DP [I] [J] = DP [I-1] [J-1];最後のものは、同一の、DPない[I] [J] =分(DP [I-1] [ J-1]、DP [I-1] [j]は、DP [I]、[J-1])+ 1。DPは[I-1] [J-1]交換作業、DPを表し、[I-1] [j]は削除、DP [I] [J-1]が表す挿入動作を示しています。また、単語の場合は空であることを検討してください。

class Solution {
    public int minDistance(String word1, String word2) {
        int n1 = word1.length();
        int n2 = word2.length();
        int[][] dp = new int[n1 + 1][n2 + 1];
        // 第一行
        for (int j = 1; j <= n2; j++) dp[0][j] = dp[0][j - 1] + 1;
        // 第一列
        for (int i = 1; i <= n1; i++) dp[i][0] = dp[i - 1][0] + 1;

        for (int i = 1; i <= n1; i++) {
            for (int j = 1; j <= n2; j++) {
                if (word1.charAt(i - 1) == word2.charAt(j - 1)) dp[i][j] = dp[i - 1][j - 1];
                else dp[i][j] = Math.min(Math.min(dp[i - 1][j - 1], dp[i][j - 1]), dp[i - 1][j]) + 1;
            }
        }
        return dp[n1][n2];  
    }
}

ここに画像を挿入説明

公開された79元の記事 ウォン称賛7 ビュー1367

おすすめ

転載: blog.csdn.net/new_whiter/article/details/104477562