• 51nod 编辑距离问题(动态规划)


    编辑距离问题

    给定两个字符串S和T,对于T我们允许三种操作:
    (1) 在任意位置添加任意字符
    (2) 删除存在的任意字符
    (3) 修改任意字符 

    问最少操作多少次可以把字符串T变成S?
    例如: S=  “ABCF”   T = “DBFG”
    那么我们可以
    (1) 把D改为A
    (2) 删掉G
    (3) 加入C

    所以答案是3。

    输入
    第1行:字符串a(a的长度 <= 1000)。
    第2行:字符串b(b的长度 <= 1000)。
    输出
    输入a和b的编辑距离
    输入示例
    kitten
    sitting
    输出示例
    3
    请选取你熟悉的语言,并在下面的代码框中完成你的程序,注意数据范围,最终结果会造成Int32溢出,这样会输出错误的答案。
    不同语言如何处理输入输出,请查看下面的语言说明。
    【分析】
    对于两个字符串a和b,dp[i][j]记录a的前i个字符转换到b的前j个字符的最小编辑距离。那么很容易得到转移方程 dp[i][j] = min(dp[i][j], dp[i-1][j-1] + a[i-1] == b[j-1] ? 0 : 1)。对每个dp[i][j],我们考虑直接从dp[i-1][j]或dp[i][j-1]加一个字符,所以初始为dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + 1。对于dp[0][i]和dp[i][0],显然都等于i。
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <time.h>
    #include <string>
    #include <map>
    #include <stack>
    #include <vector>
    #include <set>
    #include <queue>
    #define inf 0x3f3f3f3f
    #define mod 1000000007
    typedef long long ll;
    using namespace std;
    char a[1005];
    char b[1005];
    int dp[1005][1005];
    int pre[1005][1005];
    
    int main()
    {
        int i,j,len1,len2,last;
        memset(dp,0,sizeof(dp));
        memset(pre,0,sizeof(pre));
        cin>>a>>b;
        int n = strlen(a), m = strlen(b);
        for(int i = 0; i <= n; i ++) dp[i][0] = i;
        for(int i = 0; i <= m; i ++) dp[0][i] = i;
        for(int i = 1; i <= n; i ++)
        {
            for(int j = 1; j <=m; j ++)
            {
                dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + 1;
                dp[i][j] = min(dp[i][j], dp[i-1][j-1] + (a[i-1] != b[j-1]));
            }
        }
        printf("%d
    ", dp[n][m]);
        return 0;
    }
    View Code
  • 相关阅读:
    C++ 函数指针
    windows重建ESP分区修复引导
    [Python] typora文档复制到博客图片失效 SM.MS限制
    [Python] 破解一款软件验证
    requests.packages.urllib3.exceptions.ProxySchemeUnknown: Not supported proxy scheme
    nvalidSchema: Missing dependencies for SOCKS support
    html 未选择复选框不上传
    deepin linux 安装之后 引导错误 出现 grub>
    js/jquery加入的select value显示不正确问题
    请求响应状态status为canceled
  • 原文地址:https://www.cnblogs.com/jianrenfang/p/5710767.html
Copyright © 2020-2023  润新知