zoukankan      html  css  js  c++  java
  • 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基础-多态
    JAVA基础-- 对象转型 (casting)
    Flutter: 下拉刷新,上拉加载更多
    Flutter 创建dashboard页面
    Android Studio 3.3.1 向avd模拟器发送本地文件
    Flutter 真机调试
    android adb命令,向开发手机添加文件
    获取用户在web页面上选中的文本
    Cheat Engine 6.8 设置中文
    Flutter 编写内联文本
  • 原文地址:https://www.cnblogs.com/aerer/p/9930956.html
Copyright © 2011-2022 走看看