Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Edit Distance implementation #75

Merged
merged 7 commits into from
Oct 4, 2018
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions Dynamic Programming/EditDistance.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
A Dynamic Programming based Java program to find minimum
number operations to convert str1 to str2
*/
class EditDistance
{
// Returns the min int
static int min(int x,int y,int z)
{
if (x <= y && x <= z) return x;
if (y <= x && y <= z) return y;
else return z;
}

// Edit Distance based on DP
static int editDistanceDP(String str1, String str2, int m, int n)
{
// Create a table to store results of subproblems
int dp[][] = new int[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.charAt(i-1) == str2.charAt(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];
}



public static void main(String args[])
{
String str1 = "their";
String str2 = "they're";
System.out.println( editDistanceDP( str1 , str2 , str1.length(), str2.length()) );
}
}
61 changes: 61 additions & 0 deletions Dynamic Programming/EditDistance/Java/EditDistance.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
A Dynamic Programming based Java program to find minimum
number operations to convert str1 to str2
*/
class EditDistance
{
// Returns the min int
static int min(int x,int y,int z)
{
if (x <= y && x <= z) return x;
if (y <= x && y <= z) return y;
else return z;
}

// Edit Distance based on DP
static int editDistanceDP(String str1, String str2, int m, int n)
{
// Create a table to store results of subproblems
int dp[][] = new int[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.charAt(i-1) == str2.charAt(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];
}



public static void main(String args[])
{
String str1 = "their";
String str2 = "they're";
System.out.println( editDistanceDP( str1 , str2 , str1.length(), str2.length()) );
}
}
10 changes: 10 additions & 0 deletions Dynamic Programming/EditDistance/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Edit Distance Implementation

## Problem Statement
Given two strings str1 and str2 and below operations that can performed on str1. Find minimum number of edits (operations) required to convert ‘str1’ into ‘str2’. All of the above operations are of equal cost.

## Steps
1. Create an array to store results of all the subproblems
2. Check if any of the two strings is empty
3. If the last characters are same call method recursively
4. Else-If the last character is different, consider all possibilites and find the minimum