两个字符串
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 26 Accepted Submission(s) : 11
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
给出两个字符串A和B,判断是否有存在一个子串既出现在A中又出现在B中。
Input
第一行为一个整数T,表示测试数据组数
接着T组测试数据,每组测试数据包含两行,每行一个字符串(仅由字母组成)。
字符串长度不超过10^5
Output
对于每组测试数据,如果存在符合条件的子串,输出YES, 否则输出No
Sample Input
Sample Output
Author
Wei Tong
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char a[100000],b[100000];
int main()
{
char s[26],c[26];
int test,i,j,k,t,lena,lenb,ans;
scanf("%d",&test);
while(test--)
{
ans=0;
scanf("%s%s",a,b);
lena=strlen(a);
lenb=strlen(b);
sort(a,a+lena);
sort(b,b+lenb);
s[0]=a[0];
c[0]=b[0];
for(i=1,j=1;i<lena;i++)
{
if(a[i]!=a[i-1])
{
s[j]=a[i];
j++;
}
}
for(i=0,k=1;i<lenb;i++)
{
if(b[i]!=b[i-1])
{
c[k]=b[i];
k++;
}
}
for(i=0;i<j;i++)
{
for(t=0;t<k;t++)
{
if(s[i]==c[t])
{
ans=1;
break;
}
}
}
if(ans==1)
printf("YES\n");
else
printf("No\n");
}
return 0;
}
//简洁的代码:
/*#include<cstdio>
#include<cstring>
int main()
{
int a[200],i,T,ok=0;
char s1[100002],s2[100002];
scanf("%d",&T);
while(T--)
{
memset(a,0,sizeof(a));
scanf("%s",s1);
scanf("%s",s2);
for(i=0; i<strlen(s1); i++)
{
a[s1[i]-'A']++;
}
for(i=0,ok=0; i<strlen(s2); i++)
{
if(a[s2[i]-'A']>0)
{
ok=1;
break;
}
}
if(ok)
{
printf("YES\n");
}
else printf("No\n");
}
return 0;
}
*/