哈希字符串通常是指将一个字符串通过哈希算法转换成固定长度的哈希值。这个哈希值可以用于检查数据的完整性、快速查找、数据去重等应用。
换句话说,就是字符串哈希使字符串变成数字。
查找时间复杂度:O(1)
unordered_map和unordered_set在STL中是使用哈希表作为其底层实现。
哈希值的运算
将字符串字符的ASCII码值作为128进制转10进制
求哈希值代码
has[0]=(long long)s[0]%mod;
for(int i=1;i<s.size();i++){
has[i]=(has[i-1]*128+(long long)s[i])%mod;
}
printf("%lld",has[s.size()-1]);
查字典
题意
根据所给对应的单词,翻译指定单词,没有则输出eh
思路
哈希值相同的字符串必然相同,利用这一性质,就可以快速确定单词
代码
#include<bits/stdc++.h>
using namespace std;
long long n,m,h;
bool f;
string s1[1005],ss;
long long b[1005];
long long hass(string s){
long long ans=0;
for(int i=0;i<s.size();i++){
ans+=pow(128,(s.size()-1-i))*(long long)s[i];
}
return ans;
}
int main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
cin>>s1[i]>>ss;
b[i]=hass(ss);
}
scanf("%lld",&m);
for(int i=1;i<=m;i++){
cin>>ss;
h=hass(ss);
f=0;
for(int j=1;j<=n;j++){
if(b[j]==h){
cout<<s1[j]<<endl;
f=1;
break;
}
}
if(!f){
printf("eh\n");
}
}
return 0;
}