PAT乙级1039
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
int i;
int a[200]={0};
char s[10000],s1[100000];
gets(s);
int l=strlen(s);
for(i=0;i<l;i++)
{
a[s[i]]++;
}
gets(s1);
int l1=strlen(s1);
for(i=0;i<l1;i++)
{
a[s1[i]]--;
}
int num=0;int bool=0;
for(i=0;i<200;i++)
{
if(a[i]<0)
{
bool=1;
break;
}
}
if(bool==1)
{
for(i=0;i<200;i++)
{
if(a[i]<0)
num+=a[i];
}
num=-num;
printf("No %d",num);
}
else
{
for(i=0;i<200;i++)
num+=a[i];
printf("Yes %d",num);
}
return 0;
}
1.gets以换行符或文件结束符EOF为结束标志,而scanf还以空格制表符为结束标志。
2.可以用字符作为数组下标,会自动转换为字符的ASCII码
3.涉及2个数组比较的算法可以使用哈希散列表的思想来代替2个for循环减少时间复杂度

浙公网安备 33010602011771号