chore(CPlusPlus): Add Edit Distance (#458)

Co-authored-by: Arsenic <54987647+Arsenic-ATG@users.noreply.github.com>
pull/465/head
sakssingh 2021-09-14 00:31:10 +05:30 committed by GitHub
parent f9a2d4d447
commit 0607b7cbdc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 73 additions and 0 deletions

View File

@ -0,0 +1,72 @@
// Given two strings 's1' and 's2' and below operations that can performed on 's1'.
// 1.Insert
// 2.Remove
// 3.Replace
//Find minimum number of edits (operations) required to convert s1 into s2.
// NOTE: All above operations are of equal cost
// Input: s1 = "car", s2 = "cars"
// Output: 1
// We can convert s1 into s2 by inserting a 's'.
//Program using Dynamic Programming
//TIME COMPLEXITY: O(m*n)
#include <iostream>
#include <vector>
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 s1, string s2, int m, int n)
{
vector<vector<int>> dp(m + 1, vector<int>(n + 1));
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 (s1[i - 1] == s2[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];
}
int main()
{
string s1, s2;
cout << "Enter 1st string: " << '\n';
cin >> s1;
cout << "Enter 2nd string: " << '\n';
cin >> s2;
int n = s1.length();
int m = s2.length();
cout << editDistDP(s1, s2, n, m);
return 0;
}
// s1: food
// s2: money
// output: 4

View File

@ -21,6 +21,7 @@
2. [Longest Common Substring](Dynamic-Programming/longest-common-substring.cpp) 2. [Longest Common Substring](Dynamic-Programming/longest-common-substring.cpp)
3. [0/1-knapsack](Dynamic-Programming/01-knapsack.cpp) 3. [0/1-knapsack](Dynamic-Programming/01-knapsack.cpp)
4. [Matrix chain Multiplication](Dynamic-Programming/matrix-chain-multiplication.cpp) 4. [Matrix chain Multiplication](Dynamic-Programming/matrix-chain-multiplication.cpp)
5. [Edit Distance](Dynamic-Programming/edit-distance.cpp)
## Graphs ## Graphs