字符串哈希
作者:互联网
1.哈希法:将字符串转化成某个进制的整数(大进制)否则容易造成哈希冲突,即不同的字符串转化的数却相同,再进行数字间不同的比较
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const ull mod=327819827801;
ull a[100010];
ull hashe(string s){
ull res=0;
for(int i=0;i<s.size();i++){
res=(res*131+ull(s[i]))%mod;//将字符串转化为进制为131的整数
}
return res;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
string s;
cin>>s;
a[i]=hashe(s);//a[i]中存放每个字符串对应的数
}
sort(a,a+n);
ull ans=1;
for(int i=0;i<n-1;i++){
if(a[i]!=a[i+1])ans++;
}
cout<<ans;
return 0;
}
2.c++中的stl库中的集合set(具有去重的功能)
#include <bits/stdc++.h>
using namespace std;
set<string>s;//集合set自带去重功能
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
string s1;
cin>>s1;
s.insert(s1);
}
cout<<s.size();
return 0;
}
3.直接利用sort将字符串按字典序排序
#include <bits/stdc++.h>
using namespace std;
const int N=1e6;
string s[N];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i];
}
sort(s,s+n);
int ans=1;
for(int i=0;i<n-1;i++){
if(s[i]!=s[i+1])ans++;
}
cout<<ans<<endl;
return 0;
}
标签:哈希,int,namespace,ull,字符串,include 来源: https://blog.csdn.net/m0_61094896/article/details/123191808