前言
正文
参考题解
#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;
}