A1092
可输入内容为0-9,a-z,A-Z。
输入:
第一行输入任意字符串;
第二行输入期望字符串。
输出:
如果第一行包含了所有期望字符串,输出yes和多余字符个数;
如果第一行不能完全包含期望字符串,输出缺失的字符个数。
思路:
记录第一行字符串每种字符个数,用HashTable数组记录;
遍历第二行字符串,遍历一个就在HashTable里对应的元素-1,如果HashTable<0,miss++;
miss>0,则输出no,反之则输出yes。
1 #include<cstdio>
2 #include<cstring>
3 const int maxn=1010;
4 //第一个字符串中每种字符个数,miss为缺少的字符个数
5 int hashTable[80]={0},miss=0;
6 //输入的字母和数字转化为HashTable的下标
7 int change(char c){
8 if(c>='0'&&c<='9') return c-'0';
9 if(c>='a'&&c<='z') return c-'a'+10;
10 if(c>='A'&&c<='Z') return c-'A'+36;
11 }
12
13 int main(){
14 char wh[maxn],tar[maxn];
15 scanf("%s",wh);
16 scanf("%s",tar);
17 int len1=strlen(wh);
18 int len2=strlen(tar);
19 for(int i=0;i<len1;i++){//第一串中的每种字符串个数
20 int id=change(wh[i]);
21 hashTable[id]++;
22 }
23 for(int i=0;i<len2;i++){
24 int id=change(tar[i]);
25 hashTable[id]--;
26 if(hashTable[id]<0) miss++;
27 }
28 if(miss>0) printf("No %d\n", miss);
29 else printf("Yes %d\n", len1-len2);
30 return 0;
31 }