处女座与复读机(C++)
题目描述
一天,处女座在牛客算法群里发了一句“我好强啊”,引起无数的复读,可是处女座发现复读之后变成了“处女座好强啊”。处女座经过调查发现群里的复读机都是失真的复读机,会固定的产生两个错误。一个错误可以是下面的形式之一:
- 将任意一个小写字母替换成另外一个小写字母
- 在任意位置添加一个小写字母
- 删除任意一个字母
处女座现在在群里发了一句话,他收到了一个回应,他想知道这是不是一个复读机。
输入描述:
两行
第一行是处女座说的话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;
}