AtCoder Beginner Contest 386#C - Operate 1题解
题目链接:洛谷 AtCoder
题目翻译:{题目翻译}
两个字符串的差别有以下几种可能(不包括如果两个字符串的长度相差大于1):
1、
a c d
i
a b c d
i i+1
发现原始字符串的第i项与目标字符串的第i+1项相同,说明原始字符串i项前少了目标字符串的第i项,所以在原始字符串i项前插入目标字符串的第i项。
2、
a b c d
i i+1
a c d
i
发现原始字符串的第i+1项与目标字符串的第i项相同,说明原始字符串i+1项前比目标字符串多了1项,所以删除原始字符串i项。
3、
a b d
i i+1
a c d
i i+1
发现原始字符串的第i+1项与目标字符串的第i+项相同,说明原始字符串i项与目标字符串i项不同,所以使原始字符串i项等于目标字符串i项。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
//注意:k=1,所以这道题是判断能否一次改动使两个字符串相同。
string n,m;
int k,h=0,x,y,z;
cin>>k>>n>>m;
if((n.size()>m.size()+1)||(n.size()<m.size()-1))
{
cout<<"No";//如果两个字符串的长度相差大于1,那么无法一次使两字符串相同,直接输出,结束程序。
return 0;
}
for(int i=0;i<min(n.size(),m.size());i++)
{
if(n[i]!=m[i]&&h==1)
{
cout<<"No";//如果已经改动一次,但仍有不同,直接输出,结束程序。
return 0;
}
else if(n[i]!=m[i]&&h==0)
{
if(m[i+1]==n[i]&&i>0)
{
n.insert(i,m,i,1);
}
else if(m[i+1]==n[i]&&i==0)
{
n.insert(i,m,i,i+1);
}
else if(m[i]==n[i+1])
{
n.erase(i,1);
}
else
{
n[i]=m[i];
}
h=1;//标记改动一次。
}
}
cout<<"Yes";//若程序能运行到这一行,证明两字符串相等。
return 0;
}