1970: 李华认亲
时间限制: 1 Sec 内存限制: 128 MB
题目描述:
李华说小名是他的小名
来自莫尔塔星云的小名为了寻找他的祖先们而在宇宙中四处游荡,他在宇宙中游荡了几亿年,早就忘记了祖先们的各种特征,只能凭借着他们独有的编码串——一串由大写字母组成的字符串来识别血缘。
现在小名找到了一个带有编码串的生物,但是因为编码串太长,需要很长时间的比对而让小名头疼不已。
请你编写一种程序,帮助小名快速识别该生物是不是小名的祖先
已知小名的编码串str1和该生物的编码str2串长度均小于1000,且小名的编码串长度不大于祖先。如果该生物的编码串str2包含小名编码串str1所有编码符(不考虑编码顺序),则认为该生物为小名的祖先。
测试数据有多组。
输入:
先输入一个整数,表示有多少组测试数据
然后输入小名的编码串str1和生物的编码串str2
输出:
如果该生物是小明的祖先输出“Yes”,
否则输出“No”
样例输入:
2
ABCADB
ABBCADBA
AAAAABBBBB
ABABABABAAC
样例输出:
Yes
No
题目分析:
两个由大写字母组成的字符串str1和str2,长度都小于1000。如果str1里面有的str2都有,则输出Yes,否则输出No。
坑点分析:
题目中说str2包含str1则证明是小名的祖先,此处大家容易把包含理解为字符种类的包含而忽略数量的包含。
代码示例:
方法有很多,此处只举例一种
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,a,b,N,k;
char str1[1001],str2[1001];
scanf("%d",&N);
while(N--)
{
k=0;
scanf("%s %s",str1,str2);
a=strlen(str1);
b=strlen(str2);
for(i=0;i<b;i++)
{
for(j=k;j<a;j++)
{
if(str2[i]==str1[j])
{
str2[i]='0';
k++;
break;
}
}
if(k==a) //str1遍历结束且符合题意
{
printf("Yes\n");
break;
}
}
if(k!=a) printf("No\n");
}
return 0;
}