题目
pata1084
题目思路
利用一个散列函数将每一个可能输入的元素c映射为一个数字a,建立一个数组i,第一次输入时每输入一个元素i[a]++,第二次输入时i[a]–,最后按照第一次输入的数据对数组扫描,输出i[a]不为0的元素。
参考代码
#include<iostream>
#include<cstring>
using namespace std;
int id[26+10+1]={0};
int hasht(char c);
int main()
{
char c[81],c2[81];
scanf("%s",c);
for(int i=0;i<strlen(c);i++)
{
id[hasht(c[i])]++;
}
scanf("%s",c2);
for(int i=0;i<strlen(c2);i++)
id[hasht(c2[i])]--;
for(int i=0;i<strlen(c);i++)
{
if(id[hasht(c[i])]!=0)
{
if(c[i]>='a'&&c[i]<='z')
c[i]=c[i]-'a'+'A';
printf("%c",c[i]);
id[hasht(c[i])]=0;
}
}
return 0;
}
int hasht(char c)
{
int a=0;
if(c>='A'&&c<='Z')
{
a=c-'A';
}
else if(c>='a'&&c<='z')
a = c-'a';
else if(c>='0'&&c<='9')
a=c-'0'+26;
else if(c=='_')
a=36;
return a;
}