2G.处女座与复读机(C++)

处女座与复读机(C++)

点击做题网站链接

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

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

解题代码:

#include <iostream>
#include <cstring>
using namespace std;

int key = 0;
string s, t;

void dfs(int a,int b,int Count)
{
    if( Count>2 )
        ;//超过两次修改
    else if( a==s.size() && b==t.size() ) key = 1;//如果两者的长度都为0
    else if( s[a]==t[b] ) dfs(a+1,b+1,Count);//递归循环
    else
    {
        dfs(a+1,b,Count+1);//添加
        dfs(a+1,b+1,Count+1);//修改
        dfs(a,b+1,Count+1);//删除
    }
}

int main()
{
    cin >> s >> t;
    dfs(0,0,0);
    if( key ) cout << "YES" << endl;
    else cout << "NO" << endl;
}
原文地址:https://www.cnblogs.com/yuzilan/p/10626112.html