(水)
一般来说,我们使用BKDRhash还进行字符串的哈希操作。
具体地,我们将字符串看成一个大进制数,然后取模就行了。
code:
int hash(string s)
{
int ans=0,l=s.length();
for(int i=0;i<l;i++)ans=(ans*base%mod+(s[i]-'0'+1))%mod;
return ans;
}
然后就没了。
当然单哈希人品不好时会出冲突,这个时候就需要使用双哈希,取两个不同的模数。
其他部分一模一样。
code:
int hash1(string s)
{
int ans=0,l=s.length();
for(int i=0;i<l;i++)ans=(ans*base%mod1+(s[i]-'0'+1))%mod1;
return ans;
}
int hash2(string s)
{
int ans=0,l=s.length();
for(int i=0;i<l;i++)ans=(ans*base%mod2+(s[i]-'0'+1))%mod2;
return ans;
}