首页 > 代码库 > 两个字符串
两个字符串
两个字符串
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
接着T组测试数据,每组测试数据包含两行,每行一个字符串(仅由字母组成)。
字符串长度不超过10^5
Output
对于每组测试数据,如果存在符合条件的子串,输出YES, 否则输出No
Sample Input
2 hello world hi world
Sample Output
YES No
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; } */
两个字符串
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。