public class testjava {
public static void main(String[] args) {
//输入两个参数字符串
String a = args[0];
String b= args[1];
System.out.println(a);
System.out.println(b);
int i = Levenshtein.distance(a, b);
System.out.println(i);
}
}
class Levenshtein{
//****************************
//计算三个数的最小值
//****************************
private static int minimum(int a, int b, int c){
int mi = a;
if (b < mi)
mi = b;
if (c < mi)
mi = c;
return mi;
}
//*****************************
//计算 Levenshtein distance
//*****************************
public static int distance(String s, String t){
int d[][]; // 矩阵
int n; // s的长度
int m; // t的长度
int i; // iterates through s
int j;
// iterates through t
char s_i; // s的第i个字符
char t_j; // t的第j个字符
int cost; // cost
// Step 1 开辟(n+1)* (m+1)矩阵空间
原文请找腾讯752018766辣'文.论,文.网http://www.751com.cn // Step 2 第i行 第j列
for (i = 0; i <= n; i++)
d[i][0] = i;
for (j = 0; j <= m; j++)
d[0][j] = j;
// Step 3 前i行的字符
for (i = 1; i <= n; i++){
s_i = s.charAt (i - 1);
// Step 4 前j列的字符
for (j = 1; j <= m; j++){
t_j = t.charAt(j - 1);
// Step 5 前i行的字符与前j列的字符比较,字符相同标记为0,不同记为1
if (s_i == t_j){
cost = 0;
}else{
cost = 1;
}// Step 6 每一步取前i行与前j列矩阵上取(删除 插入 替换)最小值
d[i][j] = minimum(d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1] + cost);
}
}
// Step 7 编辑距离,复杂度为O(mn)。