LeetCode ---- 72. 编辑距离 (java)

LeetCode ---- 72. 编辑距离 (java)_第1张图片

求最值,动态规划题。

用 dp[i][j] 表示从 word[0...i] 转换到 word[0...j] 的最小操作,使用动态规划求解

 

LeetCode ---- 72. 编辑距离 (java)_第2张图片

class Solution {
    public int minDistance(String word1, String word2) {
       
        int row = word1.length();
        int col = word2.length();
        
         //dp[i][j]表示word1[0...i]变为word2[0...j]所使用的最少操作数
        int[][] dp = new int[row+1][col+1];
        
        //初始化:当word1为空字符串“”时,row=0
        for(int j = 0; j <= col; j++){
            dp[0][j] = j; //操作为:插入字符
        }
        
         //初始化:当word2为空字符串“”时,col=0
        for(int i = 0; i <= row; i++){
            dp[i][0] = i; //操作为:删除字符
        }
        
        for(int i = 1; i <= row ; i++){
            for(int j = 1; j <= col; j++){
                //末尾字符相同,不需要编辑.(对应字符相等,不操作.)(注意下标,dp[][]下标为从1开始,字符串下标从0开始)
                if(word1.charAt(i-1) == word2.charAt(j-1)){//所以要减去1
                     dp[i][j] = dp[i-1][j-1];
                }else{
                    // 末尾字符不同,三种编辑情况,取最小值
                    //需要操作,对应操作分别为:替换,删除,插入
                     dp[i][j] = 1 + Math.min(dp[i-1][j-1], Math.min(dp[i-1][j], dp[i][j-1]));
                }
               
            }
        }
        
        return dp[row][col];
    }
}

LeetCode ---- 72. 编辑距离 (java)_第3张图片

 

题解ref:

https://leetcode-cn.com/problems/edit-distance/solution/zi-di-xiang-shang-he-zi-ding-xiang-xia-by-powcai-3/

 

你可能感兴趣的:(数据结构,72.,编辑距离,leetcode,java,动态规划)