diff --git a/DynamicProgramming/EditDistance.java b/DynamicProgramming/EditDistance.java index 7a70db326..55a101cb8 100644 --- a/DynamicProgramming/EditDistance.java +++ b/DynamicProgramming/EditDistance.java @@ -77,4 +77,42 @@ public class EditDistance { "The minimum Edit Distance between \"" + s1 + "\" and \"" + s2 + "\" is " + ans); input.close(); } + + // edit distance problem + + public static int editDistance(String s1, String s2){ + int[][] storage = new int[s1.length() + 1][s2.length() + 1]; + return editDistance(s1, s2,storage); + + } + + public static int editDistance(String s1, String s2, int[][] storage) { + int m = s1.length(); + int n = s2.length(); + if (storage[m][n] > 0) { + return storage[m][n]; + +} +if (m== 0) { + storage[m][n] = n; + return storage[m][n]; + + } + if (n== 0) { + storage[m][n] = m; + return storage[m][n]; + + } + if (s1.charAt(0) == s2.charAt(0)) { + storage[m][n] = editDistance(s1.substring(1), s2.substring(1), storage); + return storage[m][n]; + + } else { + int op1 = editDistance(s1, s2.substring(1),storage); + int op2 = editDistance(s1.substring(1), s2,storage); + int op3 = editDistance(s1.substring(1),s2.substring(1),storage); + storage[m][n] = 1 + Math.min(op1, Math.min(op2, op3)); + return storage[m][n]; + } + } }