C语言计算2个字符串的编辑距离编辑距离:通过插入、删除、替换一个字符(和交换相邻字符)的操作,使得字符串A和字符串B相同,而最少的操作次数就是编辑距离。如字符串abcd和aca的距离是2代码转自:http://blog.csdn.net/wapwo/article/details/8831810
动态规划得到转移状态方程:1.  dis(s1,””) = d(“”,s1) = |s1|    dis(“c1″,”c2”) = c1 == c2 ? 0 :2.  dis(s1+c1,s2+c2) = min(  dis(s1,s2)+ c1==c2 ? 0 : 1 , //替换                                             dis(s1+c1,s2)+1,    //s2中插入c1,等价于s1后删除c1                                             dis(s1,s2+c2)+1  );    //s2后删除c2,等价于s1中插入c2即:f[i][j]=min{f[i-1][j-1]+c1==c2?0:1,               f[i][j-1]+1,               f[i-1][j]+1}
#include<stdio.h>
#include<string.h>
/*递归计算编辑距离 删除、替换、插入 (i行,j列)*/
int dis(char *s,char *t,int j,int i){
int a,b,c,min;
if(i>0 && j>0){
a=t[i-1]==s[j-1]?dis(s,t,j-1,i-1):dis(s,t,j-1,i-1)+1;
b=dis(s,t,j,i-1)+1;
c=dis(s,t,j-1,i)+1;
min=a>b?b:a;
return min>c?c:min;
}else if(i==0 && j==0){
return t[0]==s[0]?0:1;
}else if(i==0){
return j;
}else if(j==0){
return i;
}
}
void main(){
char *s="acdx";
char *t="acxx";
printf("\n\n%s和%s之间的距离为:%d\n\n",s,t,dis(s,t,strlen(s),strlen(t)));
}
