【YbtOJ高效进阶 哈希-1】字符串哈希

链接

YbtOJ高效进阶 哈希-1

题目描述

如题,给定 N个字符串(字符串内包含数字、大小写英文字母),请求出 N个字符串中共有多少个不同的字符串。

样例输入

5
abc
aaaa
abc
abcc
12345

样例输出

4

思路

对于每一个字符串求出哈希值(放在一个数组里),然后排序求多少个不同即可

代码

#include<algorithm> 
#include<iostream>
#include<cstring>
#include<cstdio>
#define ull unsigned long long

using namespace std;

ull a[100005];
int n, ans;
string s;
const ull p = 131;

ull hah(string s)
{
    
    
	int len = s.length();
	ull sum = 0;
	for(int i = 0; i < len; ++i)
		sum = sum * p + s[i];
	return sum; 
}//求哈希值

int main()
{
    
    
	cin>>n;
	for(int i = 1; i <= n; ++i)
	{
    
    
		cin>>s;
		a[i] = hah(s);
	}
	sort(a + 1, a + n + 1);
	for(int i = 1; i <= n; ++i)
		if(a[i] != a[i + 1]) ans++;
	printf("%d", ans);
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/LTH060226/article/details/114435025
今日推荐