力扣583题 两个字符串的删除操作 Java语言版

class Solution {
    public int minDistance(String word1, String word2) {
        // 1.确定dp数组 dp[i][j] 使以i-1为结尾的word1和以j-1为结尾的word2相同所需的最小步数
        int n1 = word1.length();
        int n2 = word2.length();
        char[] ch1 = word1.toCharArray();
        char[] ch2 = word2.toCharArray();
        int[][] dp = new int[n1+1][n2+1];
        // 2.确定递推关系
        /** 如果ch1[i-1]与ch2[j-1]相等,那么各去掉相同元素,所需最下步数不变
            if(ch1[i-1] == ch2[j-1]){
                dp[i][j] = dp[i-1][j-1];
            }else{
                如果不相等,就考虑删除word1的元素;删除word2的元素;各删一个
                dp[i][j] = Math.min(dp[i-1][j]+1,Math.min(dp[i][j-1]+1,dp[i-1][j-1] + 2);
            }
         */
        // 3.初始化 第一行第一列
        for(int i=0; i<=n1; i++){
            dp[i][0] = i;
        }
        for(int j=0; j<=n2; j++){
            dp[0][j] = j;
        }
        // 4.遍历顺序  从上到下,从左到右
        for(int i=1; i<=n1; i++){
            for(int j=1; j<=n2; j++){
                if(ch1[i-1] == ch2[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][j-1]+1,dp[i-1][j-1]+2));
                }
            }
        }
        return dp[n1][n2];
    }
}

运行结果:
力扣583题 两个字符串的删除操作 Java语言版_第1张图片

你可能感兴趣的:(力扣刷题,动态规划,leetcode,算法,动态规划)