给出恰好由三位大写字母组成的N个字符串,再给出M个查询字符串,问每个查询字符串在N个字符串中出现的次数
#include<stdio.h>
#include <iostream>
using namespace std;
const int maxn=100;//maxn为字符串不超过的个数
char s[maxn][5],temp[5];//s字符串用来贮存给出字符串们,temp字符串为查询字符串
int hashTable[26*26*26+10];//hashTable[]用来记录每个字符串所输入的次数,因为为3位大写字母,将三位大写字母看做26进制的数
int hashFunc(char s[],int len)//s为一个字符串,字符数组和数组传入函数作为参数时是不用加长度哒
{
int id=0;
for(int i=0;i<len;i++)
{
id=id*26+(s[i]-'A');//将26进制转换为10进制
}
return id;
}//该函数用来将字符串映射为独一无二的十进制整数
int main()
{
int N,M;
cin >> N >> M;
for(int i=0;i<N;i++)
{
cin >> s[i];
int id=hashFunc(s[i],3);//因为本例为3位大写字母,因此即字符串长度为3
hashTable[id]++ ;
}//该循环用来记录每个给出字符串输入次数
for(int i=0;i<M;i++)
{
cin >> temp;
int id=hashFunc(temp,3);//将查询字符串映射为所对应十进制数;
cout << hashTable[id] <<endl;
}
return 0;
}