这个题主要卡在散列上(hashmap)
其实可以直接用map(char,int)
尝试了一下用c自己手动构造hashmap的过程
attention:如果是普通的数组,str[i]中的这个i一定要是个Int
本题中的散列思想主要是,既然只有[0~9][a~z][A~Z],那我们可以把它对应到数组的0~9 10~36 ,,,这样,大大减小了空间的使用
#include<iostream>
#include<vector>
#include <unordered_set>
#include <unordered_map>
#include <cstring>
#include <stdio.h>
#include <algorithm>
using namespace std;
int hashmap[256]={0};
int sum=0;//the number of all
int num=0;//the number of need
int change(char c){
if(c>='0'&&c<='9'){
return c-'0';
}
else if(c>='a'&&c<='z'){
return c-'a'+10;
}
else{
return c-'Z'+40;//这里其实加36就行
}
}
char c1[1010],c2[1010];
int main(){
scanf("%s",c1);
scanf("%s",c2);
bool flag= true;
int len1=strlen(c1);
for (int i = 0; i < len1; ++i) {
hashmap[change(c1[i])]++;
sum++;
}
int len2=strlen(c2);
for (int i = 0; i < len2; ++i) {
if(hashmap[change(c2[i])]){
hashmap[change(c2[i])]--;
sum--;
}
else{
flag=false;
num++;
}
}
if(flag){
printf("Yes %d",sum);
}
else{
printf("No %d",num);
}
return 0;
}