洛谷_2758 编辑距离

来源:互联网 发布:oracle启动数据库命令 编辑:程序博客网 时间:2024/06/07 05:42

题意:

    求一个字符串变成另一个字符串的最少编辑次数。

思路:

    用f[i][j]记录ai到bj的最短编辑距离,可以得出动态转移方程:
当a[i]=b[j]时,f[i][j]=f[i-1][j-1];否则f[i][j]=min(f[i-1][j-1]+1,f[i][j-1]+1,f[i-1][j]+1,
其中f[i-1][j-1]+1代表把a[i]改为b[j],f[i][j-1]+1代表a[i]后面插入b[j-1],f[i-1][j]+1代表删掉a[i]。

代码:

#include<cstdio>#include<cstring>int f[2002][2002],m,n;char a[2002],b[2002];int min(int x,int y) {return x>y?y:x;}int main(){    scanf("%s%s",a,b);    m=strlen(a);n=strlen(b);    for (int i=1;i<=m;i++)      f[i][0]=i;    for (int i=1;i<=n;i++)      f[0][i]=i;//赋初值    for (int i=1;i<=m;i++)      for (int j=1;j<=n;j++)        if (a[i-1]==b[j-1]) f[i][j]=f[i-1][j-1];//相同就不用改        else f[i][j]=min(min(f[i-1][j],f[i][j-1]),f[i-1][j-1])+1;//这样写是为了简化    printf("%d\n",f[m][n]);}


原创粉丝点击