【题目描述】

给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 

你可以对一个单词进行如下三种操作:

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符


【示例】

【LeeCode】72. 编辑距离_i++


【代码】动态规划

其他题解

package com.company;
// 2023-04-08
import java.util.*;

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(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
                }
            }
        }
        return dp[M][N];
    }
}
public class Test {
    public static void main(String[] args) {
        new Solution().minDistance("horse",  "ros"); // 输出:3
        new Solution().minDistance("intention","execution"); // 输出:5
    }
}


【同类问题】

「力扣」第 1143 题:最长公共子串(中等);

「力扣」第 10 题:正则表达式匹配(困难);

「力扣」第 44 题:通配符匹配(困难);

「力扣」第 97 题:交错字符串(困难);

「力扣」第 115 题: 不同的子序列(困难);

「力扣」第 583 题:两个字符串的删除操作(中等);

「力扣」第 718 题:最长重复子数组(中等);

「力扣」第 1035 题:不相交的线(中等);

「力扣」第 1092 题: 最短公共超序列(困难)。