#include<iostream> #include<stdio.h> #include<stdlib.h> #include<math.h> #include<cstring> #include<string> #include<algorithm> #include<map> #include<vector> #include<queue> using namespace std; //读第一串是hashTable对应颜色加1,读第二串对应颜色个数减1,很多题用了类似思想 //key:颜色个数<0则miss累加1 const int MAXN=1010; //hashTable记录第一串中每种颜色的个数,用miss记录缺少的珠子个数 int hashTable[80]={0},miss=0; //将数字和字母转换为hashTable的下标 int change(char c){ if(c >= '0' && c<='9') return c-'0'; //数字 if(c >= 'a' && c<='z') return c-'a'+10; //小写字母,注意这里要加10,数组前10个位为数字 if(c >= 'A' && c <='Z') return c-'A'+36; //大写字母 } int main(){ char whole[MAXN],target[MAXN]; cin>>whole>>target; //这里不可以getline int len1=strlen(whole); //第一串的长度 int len2=strlen(target); for(int i=0;i<len1;i++){ //遍历第一串 int id= change(whole[i]); //字符-》hashTable下标 hashTable[id]++; //该颜色个数加1 } for(int i=0;i<len2;i++){ //遍历第二串 int id=change(target[i]); //字符-》hashTable下标 hashTable[id]--; //该颜色个数减1 if(hashTable[id]<0){ //该颜色个数小于0 miss++; } } if(miss>0) printf("No %d\n",miss); //有缺少 else printf("Yes %d\n",len1-len2); //有多余 system("pause"); return 0; }