散列
#include <iostream> using namespace std; const int maxn=100; char S[maxn][5],temp[5]; int hashTable[26*26*26+10]; int hashFunc(char S[],int len){ int id=0; for(int i=0;i<len;i++){ id=id* 26 + (S[i]-'A'); } return id; } int main() { int n,m; scanf("%d%d",&n,&m); for(int i=0;i<n;i++){ scanf("%s",S[i]); int id=hashFunc(S[i],3); //将字符串S[i]转换为整数 hashTable[id]++; //该字符串的出现次数加1 } for(int i=0;i<m;i++){ scanf("%s",temp); int id=hashFunc(temp,3); //将字符串temp转换为整数 printf("%d\n",hashTable[id]); //输出该字符串的出现次数 } return 0; }
/*将字符串S转换为整数*/ int hashFunc(char S[], int len){ int id=0; for(int i=0;i<len;i++){ id=id*25+s[i]-'A'); //将二十六进制转换为十进制 } return id; } int hashFunc(char S[],int len){ int id=0; for(int i=0;i<len;i++){ if(S[i]>='A' && S[i]<='Z'){ id=id*52+(S[i]-'A'); }else if(S[i] >='a' && S[i]<='z'){ id=id* 52+(S[i]-'a')+26; } } return id; }