这道题是散列的题,可以用hash数组解决,但是学过标准库之后就变懒了,懒得把字符转换为下标,还要判断是数字还是大小写字母,所以索性就用map直接映射了。然后本题还用到了C++11标准中的基于范围的遍历,特别好用。
#include<cstdio>
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
string shop,eva;
map<char,int> mp;
mp.clear(); //默认初始化为0
cin>>shop>>eva;
for(int i=0;i<shop.size();i++){
mp[shop[i]]++;
}
int flag=0,lack=0;
for(int j=0;j<eva.size();j++){
if(mp[eva[j]] < 1) {
lack++;
flag = 1;
}
mp[eva[j]]--;
}
int exceed=0;
if(flag){
printf("No %d\n",lack);
}else{
for(auto it: mp){
exceed += it.second;
}
printf("Yes %d\n",exceed);
}
return 0;
}