📅  最后修改于: 2023-12-03 15:25:03.192000             🧑  作者: Mango
字符串哈希是一种将字符串转换为数字的算法,并且能够在O(1)时间内进行字符串比较。常用于字符串匹配及字符串相等性判断。
以下是使用C++实现字符串哈希的代码:
const int base = 131; //尽量选取一个质数,避免哈希冲突
const int maxn = 100010;
unsigned long long h[maxn], p[maxn]; //h表示前缀哈希值,p表示幂次
void init()
{
p[0] = 1;
for(int i = 1; i < maxn; i++)
{
p[i] = p[i-1] * base; //预处理幂次
}
}
void Hash(char s[])
{
int len = strlen(s);
h[0] = 0;
for(int i = 1; i <= len; i++)
{
h[i] = h[i-1] * base + s[i-1]; //计算前缀哈希值
}
}
unsigned long long getHash(int l, int r)
{
return h[r] - h[l-1] * p[r-l+1]; //计算[l,r]的哈希值
}
字符串哈希常用于字符串匹配和字符串相等性判断。例如,可以使用字符串哈希来解决LeetCode的字符串同构问题。