public class EditDistance {
public static int distance(String str1, String str2, boolean verbose) {
int length1 = str1.length();
int length2 = str2.length();
int matrix[][] = new int[length1+1][length2+1];
for (int i = 0; i < length1; i++)
matrix[i][0] = i;
for (int i = 0; i < length2; i++)
matrix[0][i] = i;
for (int i = 1; i <= length1; i++) {
for (int j = 1; j <= length2; j++) {
if (str1.charAt(i-1) == str2.charAt(j-1))
matrix[i][j] = minimum(matrix[i-1][j], matrix[i][j-1], matrix[i-1][j-1]);
else
matrix[i][j] = minimum(matrix[i-1][j], matrix[i][j-1], matrix[i-1][j-1]+1);
}
}
return matrix[str1.length()+1][str2.length()+1];
}
private static int minimum (int one, int two, int three) {
return Math.min(Math.min(one, two), three);
}
}