乒乓球筐(PAT)
1.题目描述
nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类,并且每种球的数量不少于B盒中的数量,该怎么办呢?
2.输入描述:
输入有多组数据。
每组数据包含两个字符串A、B,代表A盒与B盒中的乒乓球,每个乒乓球用一个大写字母表示,即相同类型的乒乓球为相同的大写字母。
字符串长度不大于10000。
3.输出描述:
每一组输入对应一行输出:如果B盒中所有球的类型在A中都有,并且每种球的数量都不大于A,则输出“Yes”;否则输出“No”。
4.输入例子:
ABCDFYE CDE
ABCDGEAS CDECDE
5.输出例子:
Yes
No
6.解题思路:
由输入描述和输出描述我们可以总结题意要求:
1、输入两个字母都为大写的字符串,每个大写字母代表一种类型
2、输出yes的要求是B中的大写字母A中都有,且B中每个大写字母的个数都不超过A中大写字母的个数
3、所以我们可以分别遍历两个字符串,再用两个长度为26的整型数组来分别记录两个字符串中每个字母的个数
4、然后遍历两个整型数组判断对应位置是否符合
7.源代码:
#include<stdio.h>
#include<string.h>
#define N 10001
int main()
{
int a[26],b[26];
char A[N],B[N];
while(scanf("%s %s",A,B)!=-1)
{
int i,j,flag=1;
int len_A=strlen(A);
int len_B=strlen(B);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=0;i<len_A;i++)
{
j=A[i]-'A';
a[j]++;
}
for(i=0;i<len_B;i++)
{
j=B[i]-'A';
b[j]++;
}
for(i=0;i<26;i++)
{
//printf("%d %d\n",a[i],b[i]);
if((a[i]==0&&b[i]>0)||b[i]>a[i])
{
flag=0;
break;
}
}
if(flag)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}