CCF-GESP 2024 四级T1相似字符串
题目描述
对于两个字符串A和B,如果A可以通过删除一个字符,或插入一个字符,或修改一个字符变成B,那么我们说A和B是相似的。
比如 apple 可以通过插入一个字符变成 applee ,可以通过删除一个字符变成 appe ,也可以通过修改一个字符
变成 bpple ,因此 apple 和 applee 、 appe 、 bpple 都是相似的。但 applee 并不能通过任意一个操作变成bpple ,因此它们并不相似。
特别地,完全相同的两个字符串也是相似的。
给定T组A,B,请你分别判断他们是否相似。
输入
第一行一个正整数T。
接下来T行,每行两个用空格隔开的字符串A和B。
保证T<=100,A,B的长度不超过50。保证A和B只包含小写字母。
输出
输出T行,对于每组A,B,如果它们相似,则输出 similar ,否则输出 not similar 。
样例输入
5 apple applee apple appe apple bpple applee bpple apple apple
样例输出
similar similar similar not similar similar
代码
#include <bits/stdc++.h>
using namespace std;
int T;
string s,s1,s2;
bool pd()
{int len1=s1.size();int len2=s2.size();if (abs(len1-len2)>1){return false;} if (len1==len2) {int num=0;for (int i=0;i<len1;i++) {if(s1[i]!=s2[i]) {num++;if(num>1){return false;}}}return num<=1;} else{if(len1>len2){swap(s1,s2);swap(len1,len2);}int i=0,j=0,num=0;while(i<len1&&j<len2){if(s1[i]!=s2[j]){num++;if(num>1){return false;}j++;}else{i++;j++;}}}return true;
}
int main()
{cin>>T;while(T--){cin>>s1>>s2;if(pd()==true){cout<<"similar"<<endl;}else{cout<<"not similar"<<endl;}}return 0;
}