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 } 

 

       

posted @ 2019-02-15 22:41  老葛  阅读(187)  评论(0编辑  收藏  举报