您的位置:首页 > 其它

字符串编辑距离

2013-05-02 09:40 239 查看
题目描述:给定一个源串和目标串,能够对源串进行如下操作:
1.在给定位置上插入一个字符
2.替换任意字符
3.删除任意字符
写一个程序,返回最小操作数,使得对源串进行这些操作后等于目标串,源串和目标串的长度都小于2000。

此题反复出现,最近考的最多的是百度和Google的笔试面试经常考察。



D(n,m)即为字符串X[0...n-1]与Y[0...m-1]之间的最小编辑距离



#include <iostream>
#include <assert.h>
#include <stdlib.h>

int func31(char a[], int n, char b[], int m)
{
int i, j;
int tmp;
int *d;

assert( a && n>0 && b && m>0);

d = new int[(n+1)*(m+1)];

for (i=0; i<=n; i++)
{
d[m*i + 0] = i;
}
for (j=0; j<=m; j++)
{
d[m*0 + j] = j;
}

for (i=1; i<=n; i++)
{
for (j=1; j<=m ; j++)
{
d[m*i + j] = __min( d[m*(i-1)+j]+1 , d[m*i +j-1]+1);
if (a[i-1] == b[j-1])
{
d[m*i+j] = __min(d[m*i+j], d[m*(i-1)+j-1]);
}
else
{
d[m*i+j] = __min(d[m*i+j], d[m*(i-1)+j-1]+2);
}
}
}

tmp = d[m*n + m];
delete[] d;

return tmp;
}

int main()
{
char stra[] = "asfevee";
char strb[] = "safevee";

cout<<func31(stra, strlen(stra), strb, strlen(strb))<<endl;

return 0;
}


P.S. 忙实习面试,木有更多解释看一PDF(MinimumEditDistance.pdf)(网上也有)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: