• 牛客 处女座与复读机


    链接:https://ac.nowcoder.com/acm/contest/327/G
    来源:牛客网

    一天,处女座在牛客算法群里发了一句“我好强啊”,引起无数的复读,可是处女座发现复读之后变成了“处女座好强啊”。处女座经过调查发现群里的复读机都是失真的复读机,会固定的产生两个错误。一个错误可以是下面的形式之一:

    1.       将任意一个小写字母替换成另外一个小写字母

    2.       在任意位置添加一个小写字母

    3.       删除任意一个字母

    处女座现在在群里发了一句话,他收到了一个回应,他想知道这是不是一个复读机。

    输入描述:

    两行
    第一行是处女座说的话s
    第二行是收到的回应t
    s和t只由小写字母构成且长度小于100

    输出描述:

    如果这可能是一个复读机输出”YES”,否则输出”NO”
    示例1

    输入

    abc
    abcde
    

    输出

    YES
    

    说明

    abc->abcd->abcde
    示例2

    输入

    abcde
    abcde
    

    输出

    YES
    

    说明

    abcde->abcdd->abcde

    备注:

    只要能经过两步变换就从s得到t就有可能是复读机。


    这题一开始以为是LCS,所以就一直WA,WA到死。
    赛后看了一下别人的代码才知道有最小编辑距离这种dp思想。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    int dp[105][105] = {0};
    int main(){
        char str[105], ptr[105];
        scanf("%s%s",str+1, ptr+1);
        memset(dp,0,sizeof(dp));
        int i,j;
        for(i=0;str[i];i++)
            dp[i][0] = i;
        for(j=0;ptr[j];j++)
            dp[0][j] = j;
        for(i=1;str[i];i++)
            for(j=1;ptr[j];j++){
                int flag;
                if(str[i]==ptr[j])
                    flag=0;
                else 
                    flag=1;
                dp[i][j] = min(dp[i-1][j-1]+flag,min(dp[i-1][j],dp[i][j-1])+1);
            }
    
        if(dp[i-1][j-1] <= 2)
            puts("YES");
        else
            puts("NO");
    
        return 0;
    }
    View Code
  • 相关阅读:
    bat命令2
    bat实现创建、复制、删除文件及文件夹
    bat命令1
    ckeditor使用教程
    统计SqlServer每张表内的数据量
    entiryFramework 事务控制
    jQuery验证控件jquery.validate.js使用说明
    asp.net中套用母版页之后的findcontrol
    SessionState
    窗体单例问题
  • 原文地址:https://www.cnblogs.com/kongbb/p/10327647.html
Copyright © 2020-2023  润新知