#include <string> #include <algorithm> #include <iostream> using namespace std; int minDistance(const string& word1, const string& word2) { int n = word1.length(); int m = word2.length(); // 有一个字符串为空串 if (n * m == 0) return n + m; // DP 数组 int D[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[i - 1] != word2[j - 1]) left_down += 1; D[i][j] = min(left, min(down, left_down)); } } return D[n][m]; } int main() { string sA, sB; while (cin >> sA >> sB) { cout << minDistance(sA, sB) << endl; } }