• 51nod1183 编辑距离【动态规划】


    编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

    例如将kitten一字转成sitting:

    sitten (k->s)

    sittin (e->i)

    sitting (->g)

    所以kitten和sitting的编辑距离是3。俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。

    给出两个字符串a,b,求a和b的编辑距离。

    Input

    第1行:字符串a(a的长度 <= 1000)。
    第2行:字符串b(b的长度 <= 1000)。

    Output

    输出a和b的编辑距离

    Input示例

    kitten
    sitting

    Output示例

    3

    思路:一道模板题,最近在刷51nod,发现前面的题很多都是直接套模板就可以了,虽然知道套模板不好,还是懒啊(笑哭)。

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    using namespace std ;
    const int maxn=1005;
    char str1[maxn],str2[maxn];
    int dp[maxn][maxn];
    int editdistance(char *str1,char *str2)
    {
        int len1=strlen(str1);
        int len2=strlen(str2);
        for(int i=0;i<=len1;++i)
            dp[i][0]=i;       //第二个字符串长度为0,需要操作i次
        for(int j=0;j<=len2;++j)
            dp[0][j]=j;
        for(int i=1;i<=len1;++i)
        {
            for(int j=1;j<=len2;++j)
            {
                int temp;
                if(str1[i-1]==str2[j-1])
                    temp=0;
                else
                    temp=1;
                dp[i][j]=min(min(dp[i-1][j]+1,dp[i][j-1]+1),dp[i-1][j-1]+temp);
            }              //求三个中最小的
        }
        return dp[len1][len2];
    }
    int main()
    {
       cin>>str1>>str2;
       int t=editdistance(str1,str2);
       cout<<t;
        return 0 ;
    }
    
  • 相关阅读:
    java 读写word java 动态写入 模板文件
    Java代码获取NTP服务器时间
    Web环境使用相对路径发布Webservice
    eclipse 标记任务
    抽象工厂模式
    CentOS 7.0 使用yum 安装 Mariadb
    Centos 7 JDK 安装(默认之前没有安装过)
    深入浅出《设计模式》之外观模式(C++)
    深入浅出《设计模式》之工厂模式(C++)
    深入浅出《设计模式》之简单工厂模式(C++)
  • 原文地址:https://www.cnblogs.com/aerer/p/9930956.html
Copyright © 2020-2023  润新知