链接
题目描述
如题,给定 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;
}