zoukankan      html  css  js  c++  java
  • 编辑距离

    参考链接,写的超级详细了

    题目:链接

    题目描述

    设A 和B 是2 个字符串。要用最少的字符操作将字符串A 转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变换为字符串B 所用的最少字符操作数称为字符串A到B 的编辑距离,记为d(A,B)。试设计一个有效算法,对任给的2 个字符串A和B,计算出它们的编辑距离d(A,B)。

    输入

    第一行是字符串A,文件的第二行是字符串B。字符串长度不大于2000。

    输出

    输出距离d(A,B)

    样例输入

    复制
    fxpimu
    xwr

    样例输出

    5

    下面就记录一下代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define INF 99999
    int dp[2005][2005];     /*dp[i][j]表示表示A串从第0个字符开始到第i个字符和B串从第0个
    字符开始到第j个字符,这两个字串的编辑距离。字符串的下标从1开始。*/
    char a[2005],b[2005];   //a,b字符串从下标1开始
    int min(int x,int y,int z)
    {
        int m;
        if(x<y)
        m=x;
        else
        m=y;
        if(m>z)
        return z;
        else
        return m;
     } 
    int EditDis()
    {
        int len1 = strlen(a+1);
        int len2 = strlen(b+1);
        //初始化
        for(int i=1;i<=len1;i++)
            for(int j=1;j<=len2;j++)
                dp[i][j] = INF;
        for(int i=1;i<=len1;i++)
            dp[i][0] = i;
        for(int j=1;j<=len2;j++)
            dp[0][j] = j;
        for(int i=1;i<=len1;i++)
        {
            for(int j=1;j<=len2;j++)
            {
                int flag;
                if(a[i]==b[j])
                    flag=0;
                else
                    flag=1;
                dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+flag);
                //dp[i-1][j]+1表示删掉字符串a最后一个字符a[i]
                //dp[i][j-1]+1表示给字符串添加b最后一个字符
                //dp[i-1][j-1]+flag表示改变,相同则不需操作次数,不同则需要,用flag记录
            }
        }
        return dp[len1][len2];
    }
    int main()
    {
        scanf("%s",a);
        scanf("%s",b);
         int len1 = strlen(a);
        int len2 = strlen(b);
        //移位 
        for(int i=len1;i>0;i--)
        {
            a[i]=a[i-1];
         } 
             for(int i=len2;i>0;i--)
        {
            b[i]=b[i-1];
         } 
        int ans=EditDis();
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    MySql不同版本对表名大小写敏感!
    jQuery Intellisense in VS 2008
    控制台方式运行java程序示例
    有关SQL Server 2008安装时“安全程序支持规则”失败的解决方法
    正则表达式实现验证的技术总结
    网站开发架构设计要求
    jquery select控件的相关操作
    Windows Embedded Standard 7 开发随笔
    一步步做自己的webinstall安装包
    仿新浪新闻中异步替换关键字
  • 原文地址:https://www.cnblogs.com/ellen-mylife/p/11001016.html
Copyright © 2011-2022 走看看