题目
pata1092
题目思路
常规散列题目,将字母和数字转换为对应数组,在id数组中记录数目,之后扫描所需,要对满足和不满足的额外数字分别处理。
参考代码
#include<iostream>
#include<cstring>
using namespace std;
int hasht(char c);
int main()
{
char c[1001];
int br[62]={0};
int t=0,ex=0,m1;//t表示是足够还是不足,ex用以记录不足/额外的数量,m1为售卖数量
scanf("%s",c);
for(int i=0;i<strlen(c);i++)
{
br[hasht(c[i])]++;
}
m1=strlen(c);
scanf("%s",c);
for(int i=0;i<strlen(c);i++)
{
if(t==0)
{
if(br[hasht(c[i])]>0)
{
br[hasht(c[i])]--;
}
else
{
t=1;
ex=1;
}
}
else
{
if(br[hasht(c[i])]>0)
br[hasht(c[i])]--;
else
ex+=1;
}
}
if(t==0)
{
ex=m1-strlen(c);
printf("Yes %d",ex);
}
else
printf("No %d",ex);
return 0;
}
int hasht(char c)
{
int a=0;
if(c>='0'&&c<='9')
a= c-'0';
else if(c>='a'&&c<='z')
a=c-'a'+10;
else
a=c-'A'+36;
return a;
}