查看原题目请点我这里
解题思路
主要是散列,其次是对比将不足的记为负数。
#include<cstdio>
#include<cstring>
const int maxn=1005;
int arr[80]={0};
int main(){
char str[maxn],stt[maxn];
scanf("%s%s",str,stt);
int len1=strlen(str);
int len2=strlen(stt);
for(int i=0;i<len1;i++){
if(str[i]>='0'&&str[i]<='9'){
arr[str[i]-'0']++;
}else if(str[i]>='a'&&str[i]<='z'){
arr[str[i]-'a'+10]++;
}else if(str[i]>='A'&&str[i]<='Z'){
arr[str[i]-'A'+36]++;
}
}
for(int i=0;i<len2;i++){
if(stt[i]>='0'&&stt[i]<='9'){
arr[stt[i]-'0']--;
}else if(stt[i]>='a'&&stt[i]<='z'){
arr[stt[i]-'a'+10]--;
}else if(stt[i]>='A'&&stt[i]<='Z'){
arr[stt[i]-'A'+36]--;
}
}
int cntz=0,cntf=0;
for(int i=0;i<80;i++){
if(arr[i]>0) cntz+=arr[i];
else if(arr[i]<0) cntf+=(-arr[i]);
}
if(cntf>0) printf("No %d",cntf);
else printf("Yes %d",cntz);
return 0;
}