// Advanced Algorithms - Chapter 14. #include #include #include #include #include // Distance de Levenshtein // Insertion (1), Suppression (1), Substitution (1) int edit_distance(const std::string &s, const std::string &t) { auto memo = std::vector>( s.size()+1, std::vector(t.size()+1, 0)); for(auto i = 0; i < s.size()+1; i++) { for(auto j = 0; j < t.size()+1; j++) { if(i == 0) memo[i][j] = j; else if(j == 0) memo[i][j] = i; else { auto deletion = 1 + memo[i-1][j]; auto insertion = 1 + memo[i][j-1]; auto substitution = memo[i-1][j-1] + ( (s[i-1] == t[j-1]) ? 0 : 1 ); memo[i][j] = std::min(deletion, std::min(insertion, substitution)); } } } return memo[s.size()][t.size()]; } // edit_distance() int main() { std::string s, t; std::cin >> s; std::cin >> t; printf("%d\n", edit_distance(s, t)); return 0; } // main()