给出两个字符串,判断第二个字符串中的字符是否都出现在第一个中。
是,则输出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; }