|
|
@@ -0,0 +1,57 @@ |
|
|
// A Dynamic Programming based C++ program to find minimum |
|
|
// number operations to convert str1 to str2 |
|
|
#include <bits/stdc++.h> |
|
|
using namespace std; |
|
|
|
|
|
// Utility function to find the minimum of three numbers |
|
|
int min(int x, int y, int z) |
|
|
{ |
|
|
return min(min(x, y), z); |
|
|
} |
|
|
|
|
|
int editDistDP(string str1, string str2, int m, int n) |
|
|
{ |
|
|
// Create a table to store results of subproblems |
|
|
int dp[m + 1][n + 1]; |
|
|
|
|
|
// Fill d[][] in bottom up manner |
|
|
for (int i = 0; i <= m; i++) { |
|
|
for (int j = 0; j <= n; j++) { |
|
|
// If first string is empty, only option is to |
|
|
// insert all characters of second string |
|
|
if (i == 0) |
|
|
dp[i][j] = j; // Min. operations = j |
|
|
|
|
|
// If second string is empty, only option is to |
|
|
// remove all characters of second string |
|
|
else if (j == 0) |
|
|
dp[i][j] = i; // Min. operations = i |
|
|
|
|
|
// If last characters are same, ignore last char |
|
|
// and recur for remaining string |
|
|
else if (str1[i - 1] == str2[j - 1]) |
|
|
dp[i][j] = dp[i - 1][j - 1]; |
|
|
|
|
|
// If the last character is different, consider all |
|
|
// possibilities and find the minimum |
|
|
else |
|
|
dp[i][j] = 1 + min(dp[i][j - 1], // Insert |
|
|
dp[i - 1][j], // Remove |
|
|
dp[i - 1][j - 1]); // Replace |
|
|
} |
|
|
} |
|
|
|
|
|
return dp[m][n]; |
|
|
} |
|
|
|
|
|
// Driver program |
|
|
int main() |
|
|
{ |
|
|
// your code goes here |
|
|
string str1 = "sunday"; |
|
|
string str2 = "saturday"; |
|
|
|
|
|
cout << editDistDP(str1, str2, str1.length(), str2.length()); |
|
|
|
|
|
return 0; |
|
|
} |