1092. To Buy or Not to Buy (20)-map

给出两个字符串,判断第二个字符串中的字符是否都出现在第一个中。

是,则输出Yes,以及多余的字符的个数。

否,则输出No,以及缺失的个数。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
using namespace std;
const int maxn=1000+5;
const int maxbeads=62;
int numshop[maxbeads];
int numeva[maxbeads];
int vis[maxbeads];
int main()
{
    char shop[maxn],eva[maxn];
    scanf("%s %s",shop,eva);
    int len1=strlen(shop);
    int len2=strlen(eva);
    char ch;
    memset(numshop,0,sizeof(numshop));
    memset(numeva,0,sizeof(numeva));
    memset(vis,0,sizeof(vis));
    for(int i=0;i<len1;i++){
        ch=shop[i];
        if('0'<=ch&&ch<='9'){
            numshop[ch-'0']++;
        }
        else if('a'<=ch&&ch<='z'){
            numshop[ch-'a'+10]++;
        }
        else if('A'<=ch&&ch<='Z'){
            numshop[ch-'A'+36]++;
        }

    }
    for(int i=0;i<len2;i++){
        ch=eva[i];
        if('0'<=ch&&ch<='9'){
            numeva[ch-'0']++;
            vis[ch-'0']=1;
        }
        else if('a'<=ch&&ch<='z'){
            numeva[ch-'a'+10]++;
            vis[ch-'a'+10]=1;
        }
        else if('A'<=ch&&ch<='Z'){
            numeva[ch-'A'+36]++;
            vis[ch-'A'+36]=1;
        }

    }
    bool flag=true;
    int left=0,miss=0;
    for(int i=0;i<maxbeads;i++){
        if(!vis[i]){
            left+=numshop[i];
            continue;
        }
        if(numshop[i]>=numeva[i]){
            left+=numshop[i]-numeva[i];
        }
        else{
            miss+=numeva[i]-numshop[i];
            flag=false;
        }
    }
    if(flag)
        printf("Yes %d",left);
    else
        printf("No %d",miss);
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/chenxiwenruo/p/6388818.html