字符串哈希

解题思路

字符串Hash模板
设定一个方式求每一个字符串的hash值
再进行排序判重

AC代码

#include<iostream>
#include<cstdio>
using namespace std;
const int MOD=13331;
int n,ans;
string s,h[13335];
bool hash()//hash判重
{
   
	long long num;
	int len=s.size();
	for(int i=0;i<len;i++)//求值
	 num=num*64+int(s[i]),num%=1000000007;
	num%=MOD;
	if(h[num]==s)return 1;
	if(h[num]!=s&&h[num]!="")//判断是否出现过
	{
   
		int i=num+1;
		i%=MOD;
		while(i!=num)
		{
   
			if(h[i]==s)return 1;
			if(h[i]==""){
   h[i]=s;return 0;}
			i=(i+1)%MOD;
		}
	}
	h[num]=s;
	return 0;
}
int main()
{
   
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
   
		cin>>s;
		if(!hash())ans++;
	}
	printf("%d",ans);
	return 0;
}

谢谢