ACM模板
目录
- 构建
- 应用
构建
字符串哈希就是将字符串映射成一个数,哈希冲突是不可避免的,我们需要选用合适的base尽可能使得哈希冲突可能性降低
unsigned long long
溢出后相当于取模,相当于模264−12^{64}-1264−1
get(l,r)
函数返回字符串下标[l,r]的哈希值
typedef unsigned long long ull;
const int N=100010,P=131;//13331 19260817 防止哈希冲突
ull h[N],p[N];
ull get(int l,int r)
{return h[r]-h[l-1]*p[r-l+1];
}
void build(char s[])
{int n=strlen(s+1);p[0]=1;for(int i=1;i<=n;i++){p[i]=p[i-1]*P;h[i]=h[i-1]*P+str[i]-'a'+1;}
}
应用
- 暴力字符串匹配
- 优化字符串字典序比较——二分+哈希:通常可以二分最长公共前缀,然后比较公共前缀的下一个字符即可以知道字典序。
- log求最长回文串:首先将原串和逆序串哈希,枚举回文中心,二分回文半径
- 记录一些dp的状态