--- /dev/null
+package com.swabunga.spell.engine;\r\r
+\r\r
+import java.io.BufferedReader;\r\r
+import java.io.InputStreamReader;\r\r
+\r\r
+/** JMH Again, there is no need to have a global class matrix variable\r\r
+ * in this class. I have removed it and made the getDistance static final\r\r
+ */\r\r
+public class EditDistance {\r\r
+\r\r
+ public static Configuration config = Configuration.getConfiguration();\r\r
+\r\r
+ public static final int getDistance(String word, String similar) {\r\r
+ int a_size = word.length() + 1;\r\r
+ int b_size = similar.length() + 1;\r\r
+ int[][] matrix = new int[a_size][b_size];\r\r
+ matrix[0][0] = 0;\r\r
+ for (int j = 1; j != b_size; ++j)\r\r
+ matrix[0][j] = matrix[0][j - 1] + config.getInteger(Configuration.EDIT_DEL1);\r\r
+ word = " " + word;\r\r
+ similar = " " + similar;\r\r
+ int te;\r\r
+ for (int i = 1; i != a_size; ++i) {\r\r
+ matrix[i][0] = matrix[i - 1][0] + config.getInteger(Configuration.EDIT_DEL2);\r\r
+ for (int j = 1; j != b_size; ++j) {\r\r
+ if (word.charAt(i) == similar.charAt(j)) {\r\r
+ matrix[i][j] = matrix[i - 1][j - 1];\r\r
+ } else {\r\r
+ matrix[i][j] = config.getInteger(Configuration.EDIT_SUB) + matrix[i - 1][j - 1];\r\r
+ if (i != 1 && j != 1 &&\r\r
+ word.charAt(i) == similar.charAt(j - 1) && word.charAt(i - 1) == similar.charAt(j)) {\r\r
+ te = config.getInteger(Configuration.EDIT_SWAP) + matrix[i - 2][j - 2];\r\r
+ if (te < matrix[i][j]) matrix[i][j] = te;\r\r
+ }\r\r
+ te = config.getInteger(Configuration.EDIT_DEL1) + matrix[i - 1][j];\r\r
+ if (te < matrix[i][j]) matrix[i][j] = te;\r\r
+ te = config.getInteger(Configuration.EDIT_DEL2) + matrix[i][j - 1];\r\r
+ if (te < matrix[i][j]) matrix[i][j] = te;\r\r
+ }\r\r
+ }\r\r
+ }\r\r
+ return matrix[a_size - 1][b_size - 1];\r\r
+ }\r\r
+\r\r
+ public static void main(String[] args) throws Exception {\r\r
+ EditDistance ed = new EditDistance();\r\r
+ BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));\r\r
+ String input = "";\r\r
+ String input2 = "";\r\r
+ while (input != null) {\r\r
+ input = stdin.readLine();\r\r
+ input2 = stdin.readLine();\r\r
+ System.out.println(ed.getDistance(input, input2));\r\r
+ }\r\r
+ }\r\r
+}\r\r
+\r\r
+\r\r