CCF-GESP 2024 四级T1相似字符串

发布于:2024-06-08 ⋅ 阅读:(198) ⋅ 点赞:(0)
题目描述

       对于两个字符串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;
} 
运行


网站公告

今日签到

点亮在社区的每一天
去签到