/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main
(String[] args
) { final Ideone l = new Ideone();
System.
out.
println(l.
calculateLevenshteinDistance("cat",
"hat")); }
public int calculateLevenshteinDistance
(String first,
String second
) {
char[] s = first.toCharArray();
char[] t = second.toCharArray();
int substitutionCost = 0;
int m = first.length();
int n = second.length();
int[][] array = new int[m + 1][n + 1];
for (int i = 1; i <= m; i++) {
array[i][0] = i;
}
for (int j = 1; j <= n; j++) {
array[0][j] = j;
}
for (int j = 1; j <= n; j++) {
for (int i = 1; i <= m; i++) {
if (s[i - 1] == t[j - 1]) {
substitutionCost = 0;
} else {
substitutionCost = 1;
}
int deletion = array[i - 1][j] + 1;
int insertion = array[i][j - 1] + 1;
int substitution = array[i - 1][j - 1] + substitutionCost;
deletion,
insertion,
substitution));
array[i][j] = cost;
}
}
return array[m][n];
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJZmluYWwgSWRlb25lIGwgPSBuZXcgSWRlb25lKCk7CgkJU3lzdGVtLm91dC5wcmludGxuKGwuY2FsY3VsYXRlTGV2ZW5zaHRlaW5EaXN0YW5jZSgiY2F0IiwgImhhdCIpKTsKCX0KCglwdWJsaWMgaW50IGNhbGN1bGF0ZUxldmVuc2h0ZWluRGlzdGFuY2UoU3RyaW5nIGZpcnN0LCBTdHJpbmcgc2Vjb25kKSB7CgoJCWNoYXJbXSBzID0gZmlyc3QudG9DaGFyQXJyYXkoKTsKCQljaGFyW10gdCA9IHNlY29uZC50b0NoYXJBcnJheSgpOwoJCWludCBzdWJzdGl0dXRpb25Db3N0ID0gMDsKCgkJaW50IG0gPSBmaXJzdC5sZW5ndGgoKTsKCQlpbnQgbiA9IHNlY29uZC5sZW5ndGgoKTsKCQkKCQlpbnRbXVtdIGFycmF5ID0gbmV3IGludFttICsgMV1bbiArIDFdOwoKCQlmb3IgKGludCBpID0gMTsgaSA8PSBtOyBpKyspIHsKCQkJYXJyYXlbaV1bMF0gPSBpOwoJCX0KCgkJZm9yIChpbnQgaiA9IDE7IGogPD0gbjsgaisrKSB7CgoJCQlhcnJheVswXVtqXSA9IGo7CgkJfQoKCQlmb3IgKGludCBqID0gMTsgaiA8PSBuOyBqKyspIHsKCQkJZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CgkJCQlpZiAoc1tpIC0gMV0gPT0gdFtqIC0gMV0pIHsKCQkJCQlzdWJzdGl0dXRpb25Db3N0ID0gMDsKCQkJCX0gZWxzZSB7CgkJCQkJc3Vic3RpdHV0aW9uQ29zdCA9IDE7CgkJCQl9CgoJCQkJaW50IGRlbGV0aW9uID0gYXJyYXlbaSAtIDFdW2pdICsgMTsKCQkJCWludCBpbnNlcnRpb24gPSBhcnJheVtpXVtqIC0gMV0gKyAxOwoJCQkJaW50IHN1YnN0aXR1dGlvbiA9IGFycmF5W2kgLSAxXVtqIC0gMV0gKyBzdWJzdGl0dXRpb25Db3N0OwoJCQkJaW50IGNvc3QgPSBNYXRoLm1pbigKCQkJCQkJZGVsZXRpb24sCgkJCQkJCU1hdGgubWluKAoJCQkJCQkJCWluc2VydGlvbiwKCQkJCQkJCQlzdWJzdGl0dXRpb24pKTsKCQkJCWFycmF5W2ldW2pdID0gY29zdDsKCQkJfQoJCX0KCgkJcmV0dXJuIGFycmF5W21dW25dOwoJfQoKfQ==