这道题是散列的题,可以用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;
}