【题目描述】
给你两个单词 word1
和 word2
, 请返回将 word1
转换成 word2
所使用的最少操作数
你可以对一个单词进行如下三种操作:
- 插入一个字符
- 删除一个字符
- 替换一个字符
【示例】
【代码】动态规划
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 题: 最短公共超序列(困难)。