5.散列-字符串hash-课后练习题

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;
}

在这里插入图片描述

发布了9 篇原创文章 · 获赞 9 · 访问量 415

猜你喜欢

转载自blog.csdn.net/xg987599519/article/details/103971929