zoukankan      html  css  js  c++  java
  • 牛客 处女座与复读机

    链接: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
  • 相关阅读:
    三、MyCat主要配置介绍
    二、mycat15种分片规则
    一、mycat介绍
    SpringBoot使用JdbcTemplate批量保存
    linux发布常用命令
    ROS 系统架构及概念
    ROS 在 Ubuntu 18.04 安装
    利用 Skywalking 搭建 APM(应用性能管理)— 安装与配置
    elasticsearch 集群搭建及启动常见错误
    Git 基本操作
  • 原文地址:https://www.cnblogs.com/kongbb/p/10327647.html
Copyright © 2011-2022 走看看