class Solution { public int minDistance(String word1, String word2) { int n = word1.length(); int m = word2.length(); // 有一个字符串为空串 if (n * m == 0) { return n + m; } // DP 数组 int[][] D = new int[n + 1][m + 1]; // 边界状态初始化 for (int i = 0; i < n + 1; i++) { D[i][0] = i; } for (int j = 0; j < m + 1; j++) { D[0][j] = j; } // 计算所有 DP 值 for (int i = 1; i < n + 1; i++) { for (int j = 1; j < m + 1; j++) { int left = D[i - 1][j] + 1; int down = D[i][j - 1] + 1; int left_down = D[i - 1][j - 1]; if (word1.charAt(i - 1) != word2.charAt(j - 1)) { left_down += 1; } D[i][j] = Math.min(left, Math.min(down, left_down)); } } return D[n][m]; }}
class Solution: def minDistance(self, word1: str, word2: str) -> int: m, n = len(word1), len(word2) dp = [[-1] * (n + 1) for _ in range(m + 1)] def dp_dist(i, j): if dp[i][j] >= 0: return dp[i][j] if i * j == 0: dp[i][j] = i + j elif word1[i - 1] == word2[j - 1]: dp[i][j] = dp_dist(i - 1, j - 1) else: dp[i][j] = 1 + min(dp_dist(i - 1, j), dp_dist(i, j - 1), dp_dist(i - 1, j - 1)) return dp[i][j] return dp_dist(m, n)
class Solution {public: int minDistance(string word1, string word2) { int n = word1.size(), m = word2.size(); word1 = ' ' + word1; //添加空格 word2 = ' ' + word2; vector<vector<int>>f(n + 1, vector<int>(m + 1)); for(int i = 0; i <= n; i++) f[i][0] = i; //i次删除 for(int i = 0; i <= m; i++) f[0][i] = i; //i次删除 word1 -> word2 for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++){ f[i][j] = min(f[i - 1][j], f[i][j - 1]) + 1; //添加或者删除 if(word1[i] == word2[j]) f[i][j] = min(f[i][j], f[i - 1][j - 1]); else f[i][j] = min(f[i][j], f[i - 1][j - 1] + 1); //替换 } return f[n][m]; }};