• 牛客寒假算法基础集训营2 处女座与复读机(模拟 or DP)


    处女座与复读机

    链接: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就有可能是复读机。

    题解:DP是真简单啊嘤嘤嘤 模拟一定要用string写字符串
     1 import java.util.Scanner;
     2  
     3 public class Main { 
     4     static final int maxn = 105;
     5     static int [][] dp = new int[105][105];
     6     static String s,t;
     7     public static void main(String[] args) {
     8         Scanner cin = new Scanner(System.in);
     9         s = cin.next();
    10         t = cin.next();
    11         int len1 = s.length();
    12         int len2 = t.length();
    13         for(int i=1;i<=len1;i++)
    14             dp[i][0] = i;
    15         for(int j=1;j<=len2;j++)
    16             dp[0][j] = j;
    17         for(int i=1;i<=len1;i++) {
    18             for(int j=1;j<=len2;j++) {
    19                 if(s.charAt(i-1)==t.charAt(j-1))
    20                     dp[i][j] = dp[i-1][j-1];
    21                 else
    22                     dp[i][j] = Math.min(dp[i][j-1],Math.min(dp[i-1][j],dp[i-1][j-1]))+1;
    23             }
    24         }
    25         if(dp[len1][len2]>2)
    26             System.out.println("NO");
    27         else
    28             System.out.println("YES");
    29     }
    30 }

    官方题解的模拟:

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 string a,b;
      4  
      5 int main()
      6 {
      7     cin>>a>>b;
      8     if (fabs((int)a.length()-(int)b.length())>2)
      9     {
     10         puts("NO");
     11     }
     12     else
     13     {
     14         if (b.length()==a.length()+2)
     15         {
     16             int can=0;
     17             for (int i=0;i<b.length();i++)
     18             {
     19                 for (int j=i+1;j<b.length();j++)
     20                 {
     21                     string s="";
     22                     for (int k=0;k<b.length();k++)
     23                     {
     24                         if (k!=i && k!=j) s.push_back(b[k]);
     25                     }
     26                     if (a==s) can=1;
     27                 }
     28             }
     29             if (can==1) puts("YES");
     30             else puts("NO");
     31         }
     32         else if ((int)b.length()==(int)a.length()-2)
     33         {
     34             swap(a,b);
     35             int can=0;
     36             for (int i=0;i<b.length();i++)
     37             {
     38                 for (int j=i+1;j<b.length();j++)
     39                 {
     40                     string s="";
     41                     for (int k=0;k<b.length();k++)
     42                     {
     43                         if (k!=i && k!=j) s.push_back(b[k]);
     44                     }
     45                     if (a==s) can=1;
     46                 }
     47             }
     48             if (can==1) puts("YES");
     49             else puts("NO");
     50         }
     51         else if (b.length()==a.length()+1)
     52         {
     53             int can=0;
     54             for (int i=0;i<b.length();i++)
     55             {
     56                 string s="";
     57                 for (int j=0;j<b.length();j++)
     58                 {
     59                     if (j!=i) s.push_back(b[j]);
     60                 }
     61                 int cnt=0;
     62                 for (int i=0;i<a.length();i++)
     63                 {
     64                     if (a[i]!=s[i]) cnt++;
     65                 }
     66                 if (cnt<=1) can=1;
     67             }
     68             if (can==1) puts("YES");
     69             else puts("NO");
     70         }
     71         else if ((int)b.length()==(int)a.length()-1)
     72         {
     73             swap(a,b);
     74             int can=0;
     75             for (int i=0;i<b.length();i++)
     76             {
     77                 string s="";
     78                 for (int j=0;j<b.length();j++)
     79                 {
     80                     if (j!=i) s.push_back(b[j]);
     81                 }
     82                 int cnt=0;
     83                 for (int i=0;i<a.length();i++)
     84                 {
     85                     if (a[i]!=s[i]) cnt++;
     86                 }
     87                 if (cnt<=1) can=1;
     88             }
     89             if (can==1) puts("YES");
     90             else puts("NO");
     91         }
     92         else
     93         {
     94             int can=0;
     95             for (int i=0;i<b.length();i++)
     96             {
     97                 for (int j=i+1;j<b.length();j++)
     98                 {
     99                     int cnt=0;
    100                     for (int k=0;k<b.length();k++)
    101                     {
    102                         if (k==i || k==j) continue;
    103                         if (a[k]!=b[k]) cnt++;
    104                     }
    105                     if (cnt==0) can=1;
    106                 }
    107             }
    108             for (int i=0;i<b.length();i++)
    109             {
    110                 for (int j=0;j<b.length();j++)
    111                 {
    112                     string s="";
    113                     string t="";
    114                     for (int k=0;k<b.length();k++)
    115                     {
    116                         if (k!=i) s.push_back(a[k]);
    117                     }
    118                     for (int k=0;k<b.length();k++)
    119                     {
    120                         if (k!=j) t.push_back(b[k]);
    121                     }
    122                     if (s==t) can=1;
    123                 }
    124             }
    125             if (can==1) puts("YES");
    126             else puts("NO");
    127         }
    128     }
    129     return 0;
    130 }
  • 相关阅读:
    你眼中的程序员 VS 程序员眼中的自己,是时候打破代沟了
    GaussDB(for openGauss)让数据“存得下、算得快、算得准”
    初识GaussDB(for Cassandra)
    云原生势不可挡,华为云GaussDB加速企业数字化转型
    HDC.Cloud2021|开发者们都在谈的云原生到底长什么样?
    基于深度神经网络的噪声标签学习
    华为云PB级数据库GaussDB(for Redis)揭秘第七期:高斯Redis与强一致
    Delphi 窗体函数GetActiveWindow
    Delphi 窗体函数GetWindowText -获取窗口的标题
    深度学习数据预处理
  • 原文地址:https://www.cnblogs.com/1013star/p/10369696.html
Copyright © 2020-2023  润新知