代码随想录算法训练营第五十六天|动态规划part16|● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇

●  583. 两个字符串的删除操作 Delete Operation for Two Strings - LeetCode

dp[i][j] 以i-1为尾的word1,以j-1为尾的word2为相同最小操作次数为

if (word1[i - 1] == word2[j - 1]) dp[i][j] = dp[i - 1][j - 1]

else dp[i][j] =Min( dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + 2)

dp[i][0] = i;

dp[0][j] = j;

for (int i = 1; i <= word1.length(); i++)

        for (int j = 1; j <=word2.length(); j++)

dp[word1.length()][word2.length()]

class Solution {
    public int minDistance(String word1, String word2) {
        int[][] dp = new int[word1.length() + 1][word2.length() + 1];
        for (int i = 0; i < word1.length() + 1; i++) {
            dp[i][0] = i;
        }
    
        for (int j = 0; j < word2.length() + 1; j++) {
            dp[0][j] = j;
        }

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

                

●  72. 编辑距离 Edit Distance - LeetCode

dp[i][j] 以i - 1为结尾的word1,以j - 1为结尾的word2 为相同最小操作次数

if (word1[i - 1] == word2[j - 1]) dp[i][j] = dp[i - 1][j - 1]

else dp[i][j] = min

        增        dp[i - 1][j] + 1

        删        dp[i][j - 1] + 1

        替        dp[i - 1][j - 1] + 1

class Solution {
    public int minDistance(String word1, String word2) {
        int m = word1.length();
        int n = word2.length();
        int[][] dp = new int[m + 1][n + 1];

        for (int i = 1; i <= m; i++) {
            dp[i][0] = i;
        }

        for (int j = 1; j <= n; j++) {
            dp[0][j] = j;
        }

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

●  编辑距离总结篇   

你可能感兴趣的:(代码随想录算法训练营,算法,动态规划)