// Advanced Algorithms - Chapter 14. // Coût minimal de transformation d'une chaîne en une autre. #include #include #include #include using namespace std; // Distance de Levenshtein // Insertion (1), Suppression (1), Substitution (1) int edit_distance(const string &s, const string &t) { // matrice de mémoïzation : "distance" entre s[0 .. i] et t[0 .. j] auto memo = vector>(s.size() + 1, vector(t.size() + 1, 0)); for(size_t i = 0; i < s.size()+1; i++) { for(size_t j = 0; j < t.size()+1; j++) { if(i == 0) memo[i][j] = j; else if(j == 0) memo[i][j] = i; else { auto insertion = 1 + memo[i][j-1]; auto deletion = 1 + memo[i-1][j]; auto substitution = memo[i-1][j-1] + ( (s[i-1] == t[j-1]) ? 0 : 1 ); memo[i][j] = min(deletion, min(insertion, substitution)); } } } return memo[s.size()][t.size()]; } // edit_distance() int main() { string s, t; cin >> s >> t; cout << edit_distance(s, t) << '\n'; return 0; } // main()