问题描述: 给出N个字符串,每个字符串由三位大写字母组成,再给出M个查询字符串,问每个查询字符串在N个字符串中出现的次数? 解题思路: 把字符串转化为整数,利用空间来换时间效率。
C/C++代码:
#include<cstdio> #include<cstring> const int maxn=100; char S[maxn][5],temp[5]; int Hashtable[26*26*26+10]={0}; // 哈希函数,把字符串映射为整数,从而可以作为数组下标 int hashFun(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=hashFun(S[i],strlen(S[i])); Hashtable[id]++; } for(int i=0;i<m;i++) { scanf("%s",temp); int id=hashFun(temp,strlen(S[i])); printf("%d\n",Hashtable[id]); } return 0; }