From 4c1b19574b95e9db2c65f72b94bc55a86e4d6687 Mon Sep 17 00:00:00 2001 From: Haidong Ji Date: Fri, 21 Dec 2018 21:24:14 -0600 Subject: String Edit Distance done! Implementing the algo described in lecture. Getting 2 dimensional array indexing right took a bit of time. Looking at the picture helped me in realizing that the dimention should have been n+1 by m+1. First time dealing with string edit distance and alignment game, pretty interesting!--- .../sources/EditDistance.java | 43 ++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 AlgoDesignAndTechniqueEdxJava/sources/EditDistance.java (limited to 'AlgoDesignAndTechniqueEdxJava/sources/EditDistance.java') diff --git a/AlgoDesignAndTechniqueEdxJava/sources/EditDistance.java b/AlgoDesignAndTechniqueEdxJava/sources/EditDistance.java new file mode 100644 index 0000000..640d6e3 --- /dev/null +++ b/AlgoDesignAndTechniqueEdxJava/sources/EditDistance.java @@ -0,0 +1,43 @@ +import java.util.Scanner; + +public class EditDistance { + + public static void main(String args[]) { + Scanner scan = new Scanner(System.in); + + String s = scan.next(); + String t = scan.next(); + + System.out.println(editDistance(s, t)); + } + + public static int editDistance(String A, String B) { + int m = B.length(); + int n = A.length(); + int[][] D = new int[n + 1][m + 1]; + + for (int i = 0; i < n + 1; i++) { + D[i][0] = i; + } + for (int j = 0; j < m + 1; j++) { + D[0][j] = j; + } + + for (int j = 1; j < m + 1; j++) { + for (int i = 1; i < n + 1; i++) { + int insertion = D[i][j - 1] + 1; + int deletion = D[i - 1][j] + 1; + int match = D[i - 1][j - 1]; + int mismatch = D[i - 1][j - 1] + 1; + if (A.toCharArray()[i - 1] == B.toCharArray()[j - 1]) { + D[i][j] = Math.min(insertion, Math.min(deletion, match)); + } else { + D[i][j] = Math.min(insertion, Math.min(deletion, mismatch)); + } + } + } + + return D[n][m]; + } + +} -- cgit v1.2.3