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))); }