关于编辑距离的讲解可以参考以下网址:http://www.cnblogs.com/biyeymyhjob/archive/2012/09/28/2707343.html
编辑距离就是一个字符串最少经过多少次操作步骤可以变化为另外一个字符串,操作方式包括:删除、添加、修改。删除和添加是自反的,即edit(i-1,j)+1或者edit(i,j-1)+1。后面的加1就是修改和添加的操作代价,修改是edit(i-1,j-1)+(0|1)。后面的加0或者加1是需要看第一个字符串的第i个字符和第二个字符串的第j个字符是否相等,相等就是不需要修改,所以加0,不相等就需要进行一步修改,需要加1.
具体的代码为
public class BiJiJuli {
public static void main(String[] args){
System.out.println(editInstance("ergabd","abc"));
}
private static int min(int a,int b){
return a < b ? a : b;
}
private static int editInstance(String str1, String str2){
int max1 = str1.length();
int max2 = str2.length();
int[][] matrix = new int[max1+1][max2+1];
for( int i=0;i<max1+1;i++){
matrix[i][0] = i;
}
for(int i = 0;i<max2+1;i++){
matrix[0][i] = i;
}
for(int i=1;i<max1+1;i++){
for(int j=1;j<max2+1;j++){
int d = 1;
int temp = min(matrix[i-1][j]+1,matrix[i][j-1]+1);
if(str1.substring(i-1, i).equals(str2.substring(j-1,j))){
d = 0;
}
matrix[i][j] = min(temp,matrix[i-1][j-1]+d);
}
}
return matrix[max1][max2];
}
}