Я верю, что это то, что вы ищете. Вы можете удалить операторы System.out.println
, если хотите. Обратите внимание, что если вы оставите их внутри, то первая строка и столбцы будут исключены из того, что напечатано.
Проверено по результатам на странице википедии .
public int getLevenshteinDistance(String a, String b)
{
// d is a table with m+1 rows and n+1 columns
char[] s = (a).toCharArray();
char[] t = (b).toCharArray();
System.out.println(a + " - " + b);
int m = s.length;
int n = t.length;
int[][] d = new int[m + 1][n + 1];
int i;
int j;
for(i = 0; i < (m + 1); i++)
{
d[i][0] = i; //deletion
}
for(j = 0; j < (n + 1); j++)
{
d[0][j] = j; //insertion
}
for (j = 1; j < (n + 1); j++)
{
for (i = 1; i < (m + 1); i++)
{
if (s[i-1] == t[j-1])
{
d[i][j] = d[i-1][j-1];
}
else
{
d[i][j] = Math.min((d[i-1][j] + 1), //deletion
(Math.min((d[i][j-1] + 1), //insertion
(d[i-1][j-1] + 1)))); //substitution
}
System.out.print(" [" + d[i][j] + "]");
}
System.out.println("");
}
return d[m][n];
}
Для проверки:
String a = "Saturday";
String b = "Sunday";
int d = getLevenshteinDistance(a, b);
System.out.println(d);
a = "kitten";
b = "sitting";
d = getLevenshteinDistance(a, b);
System.out.println(d);