/**
* Levenshtein 距离算法 表由一个字符串转成另外一个字符串所需的最少编辑操作次数 算法
*
* @author 王文彦
* @Date 2011-8-4
*
*/
public class LevenshteinDistance {
/* 取三个数中最小的值 */
private static int Minimum(int a, int b, int c) {
int mi;
mi = a;
if (b < mi) {
mi = b;
}
if (c < mi) {
mi = c;
}
return mi;
}
// *****************************
// Compute Levenshtein distance
// *****************************
public static int LD(String src, String dis) {
int d[][]; // matrix
int sLength; // length of s
int dLength; // length of t
char s_i; // ith character of s
char t_j; // jth character of t
int cost; // cost
// Step 1
sLength = src.length();
dLength = dis.length();
if (sLength == 0) {
return dLength;
}
if (dLength == 0) {
return sLength;
}
d = new int[sLength + 1][dLength + 1];
// Step 2
for (int i = 0; i <= sLength; i++) {
d[i][0] = i;
}
for (int j = 0; j <= dLength; j++) {
d[0][j] = j;
}
// Step 3
for (int i = 1; i <= sLength; i++) {
s_i = src.charAt(i - 1);
// Step 4
for (int j = 1; j <= dLength; j++) {
t_j = dis.charAt(j - 1);
// Step 5
if (s_i == t_j) {
cost = 0;
} else {
cost = 1;
}
// Step 6
d[i][j] = Minimum(d[i - 1][j] + 1, d[i][j - 1] + 1,
d[i - 1][j - 1] + cost);
}
}
return d[sLength][dLength];
}
/**
* @param args
* @param
*/
public static void main(String[] args) {
System.out.println(LD("aecdf", "abcd"));
}
}