Given : 2 strings A and B.
Objective : To find the minimum number of operations required to convert string A to string B.
Using operations
1. Insert a letter.
2. Delete a letter.
3. Replace a letter.
C++ : Program to convert string A to string B using insert, delete or replace operations
#include<iostream>
#include<string>
#include<vector>
using namespace std;
// Below function returns the minimum edits (insert/delete/replace)
// that are required to convert word1 to word2
int MinimumEdits (string word1, string word2) {
// Allocate memory to the DP table
int **table = new int * [word1.size() + 1];
for (int i=0; i<=word1.size(); i++) {
table[i] = new int [word2.size() + 1];
}
// Set the base case values
for (int i=0; i<=word1.size(); i++) {
table[i][0] = i;
}
for (int i=0; i<=word2.size(); i++) {
table[0][i] = i;
}
// Calculate the minimum edits
for (int i=1; i<=word1.size(); i++) {
for (int j=1; j<=word2.size(); j++) {
if(word1.at(i-1) == word2.at(j-1)) {
table[i][j] = table[i-1][j-1];
} else {
int min_val = min(table[i-1][j], table[i][j-1]);
min_val = min(min_val, table[i-1][j-1]) + 1;
table[i][j] = min_val;
}
}
}
int min_edits = table[word1.size()][word2.size()];
// Free the memory
for (int i=0; i<=word1.size(); i++)
delete[] table[i];
delete[] table;
return min_edits;
}
int main() {
vector<string> from = { "zebra", "lion", "sun", "two"};
vector<string> to = { "bra", "leon", "sunny", "twice" };
for (int i=0; i<from.size(); i++)
cout << "Minimum edit required to convert " + from[i] + " to " + to[i] + " : " << MinimumEdits (from[i], to[i]) << endl;
return 0;
}
Output
Minimum edit required to convert zebra to bra : 2
Minimum edit required to convert lion to leon : 1
Minimum edit required to convert sun to sunny : 2
Minimum edit required to convert two to twice : 3