5.散列-字符串hash-课后练习题
题目:给出N个字符串(由三个大写字母组成)再给出M个查询字符串,问其在A中的出现的次数?(N,M<100)
自己思考一下:
N数组可以使用 char N [times] [3] 二维数组 也可以 使用c++的 string 数组
但是M数组只是查询不需要存储 故只需要一个一维数组,循环读入输出即可。
#include <bits/stdc++.h>
using namespace std;
int hashlist[26*26*26+10]; //用来存储和计数
char N[100][5],M[5];
int hash(char s[],int len) //hash转换函数 将字符串转成数字
{
int id=0;
for(int i=0;i<len;i++)
{
id=id*26+(s[i]-'A');
}
return id;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>N[i];
int id=hash(N[i],3); //字符串转成数字
hashlist[id]++; //该字符串出现一次+1
}
for(int i=0;i<m;i++)
{
cin>>M;
int id=hash(M,3); //字符串转成数字
cout<<hashlist[id]<<endl;
}
return 0;
}