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;
}