classSolution { public: intminDistance(string word1, string word2){ int n = word1.size(), m = word2.size(); vector<vector<int> > dp(n+1, vector<int>(m+1, INT_MAX)); dp[0][0] = 0; for (int i = 0; i < m; ++i) dp[0][i+1] = i + 1; for (int i = 0; i < n; ++i) dp[i+1][0] = i + 1; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (word1[i] == word2[j]) { dp[i+1][j+1] = dp[i][j]; continue; } // 插入 dp[i+1][j+1] = min(dp[i+1][j+1], dp[i+1][j]+1); // 删除 dp[i+1][j+1] = min(dp[i+1][j+1], dp[i][j+1]+1); // 替换 dp[i+1][j+1] = min(dp[i+1][j+1], dp[i][j]+1); } } return dp[n][m]; } };
python
classSolution: defminDistance(self, word1: str, word2: str) -> int: n, m = len(word1), len(word2) dp = [[0]*(m+1) for _ inrange(n+1)] dp[0] = [i for i inrange(m+1)] for i inrange(n+1): dp[i][0] = i for i inrange(n): for j inrange(m): if word1[i] == word2[j]: dp[i+1][j+1] = dp[i][j] continue dp[i+1][j+1] = min(dp[i+1][j], dp[i][j+1], dp[i][j]) + 1 return dp[n][m]