#include #include #include //#include using std::string; int editDistance(const string &A, const string &B) { int m = B.length(); int n = A.length(); 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; } for (int j = 1; j < m + 1; j++) { for (int i = 1; i < n + 1; i++) { int insertion = D[i][j - 1] + 1; int deletion = D[i - 1][j] + 1; int match = D[i - 1][j - 1]; int mismatch = D[i - 1][j - 1] + 1; if (A.at(i - 1) == B.at(j - 1)) { D[i][j] = std::min(insertion, std::min(deletion, match)); } else { D[i][j] = std::min(insertion, std::min(deletion, mismatch)); } } } return D[n][m]; } //TEST(EditDistance, d2) { // ASSERT_EQ(0, editDistance("ab", "ab")); //} //TEST(EditDistance, d1) { // ASSERT_EQ(1, editDistance("a", "x")); //} // //TEST(EditDistance, d3) { // ASSERT_EQ(3, editDistance("short", "ports")); //} // //TEST(EditDistance, d4) { // ASSERT_EQ(5, editDistance("editing", "distance")); //} int main() { string str1; string str2; std::cin >> str1 >> str2; std::cout << editDistance(str1, str2) << std::endl; return 0; }