思路
把删除字符和增加字符两种操作其实可以合并成一种,本人没有做任何字符串操作。我分成了以下三种情况:
- 两个字符串长度相等,改变字符串方式只有改变字符串中的字符一种方式,所以只需在两个字符串中寻找不相同字符个数,如果不相同字符数小于等于 1 1 1就可以,否则不行。
- 两个字符串长度相差等于 1 1 1,先将长度较长字符串放在第一个,方便操作。只需在两个字符串中遍历,创建一个标记,在第一个不相同的字符改标记,标记代表第二个字符串中已经有插入过数,以后坐标都改成 i + 1 i+1 i+1。当标记为 1 1 1 时,在后面还能找到不同的字符,也是不行的。
- 两个字符串长度相差大于 1 1 1,这是不行的。
AC代码
#include<bits/stdc++.h>
using namespace std;
int k,an,bn;
string a,b;
int main(){
cin>>k>>a>>b;
if(a.size()<b.size()) swap(a,b);
an=a.size();
bn=b.size();
if(an-bn>1){
cout<<"No";
exit(0);
}
if(an-bn==1){
int s=0;
for(int i=0;i<bn;i++){
if(a[i+s]!=b[i]) s=1;
if(s==1&&a[i+s]!=b[i]){
cout<<"No";
exit(0);
}
}
}
if(an==bn){
int s=0;
for(int i=0;i<an;i++){
if(a[i]!=b[i]) s++;
}
if(s>=2){
cout<<"No";
exit(0);
}
}
cout<<"Yes";
return 0;
}