前言

传送门

正文


参考题解

#include<iostream>
#include<string>

using namespace std;
/* 输入字符串a,b; 若字符串b中的每个字符都能在字符串a中匹配(数量不大于a中相应的字符),则输出Yes,同时输出a.size()-b.size(); 若字符串b中存在某些字符不能再字符串a中匹配,则输出No,同时输出为了组成字符串b,还需要多少字符 解题步骤: 首先读入a,b;遍历a,将a中出现的字符及其出现次数存放到hashTable中; 再遍历b,对于b出现的每一个字符bi,如果hashTable[bi]==0,flag=true,res++。 如果flag==false,则输出Yes和a.size()-b.size() 否则输出No和res */
const int N=256;
string a,b;
int hashTable[N]={0}; 
int main(){
	cin>>a>>b;
	int lenA=a.size(),lenB=b.size();
	for(int i=0;i<lenA;i++) hashTable[a[i]]++;
	bool flag=false;
	int res=0;
	for(int i=0;i<lenB;i++){
		if(hashTable[b[i]]==0){
			flag=true;
			res++;
		}else hashTable[b[i]]--;
	}
	if(flag==false)printf("Yes %d\n",lenA-lenB);
	else printf("No %d\n",res);
	return 0;
}