题目链接:点击打开链接
知识点笔记:
AC代码:
两种方法
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
void f1();
const int MAXN = 1010;
int HashTable[80]={0},miss=0;
int change(char c){ //把0~9,a~z,A~Z按0~62编号
if(c>='0'&&c<='9') return c-'0';
if(c>='a'&&c<='z') return c-'a'+10;
if(c>='A'&&c<='Z') return c-'A'+36;
}
int main() {
char whole[MAXN],target[MAXN];
gets(whole);
gets(target);
int len1=strlen(whole);
int len2=strlen(target);
for(int i=0;i<len1;i++){
int id = change(whole[i]);
HashTable[id]++;
}
for(int i=0;i<len2;i++){
int id=change(target[i]);
HashTable[id]--;
if(HashTable[id]<0){
miss++;
}
}
if(miss>0) printf("No %d\n",miss);
else printf("Yes %d\n",len1-len2);
return 0;
}
// 非hash
void f1(){
char str1[1010],str2[1010];
bool hashTable[1010]={false};
gets(str1); //卖的珠子g
gets(str2); //要的珠子b
int len1=strlen(str1);//g
int len2=strlen(str2);//b
int count=len2; //缺的珠子数目
for(int i=0;i<len2;i++){
char c2 = str2[i];
int j;
for(j=0;j<len1;j++){
char c1 = str1[j];
if(c1==c2&&hashTable[j]==false)
{
count--;
hashTable[j]=true;
break;
}
}
}
if(count==0){
printf("Yes %d\n",len1-len2);
}else{
printf("No %d\n",count);
}
}