题目描述
对于两个字符串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;
}