字符串前缀哈希
字符串前缀哈希
当遇到如比较两个区间内的字符是否相同时 可以用这种方法 十分快速
此方法精髓在于用数来表示哈希值 便于理解与记忆 用P=10即十进制来理解
如1234
h[0]=0 注意从h[1]开始存 不然A为0 算下去AA也为0 所以从1开始
h[1]=h[0]P+str[1]=010+1=1
h[2]=h[1]P+str[2]=110+2=12
h[3]=h[2]P+str[3]=1210+3=123
h[4]=h[3]P+str[4]=12310+4=1234
若求一个区间 如L=3 R=4 即34
则是 1234-12*10^2
即 h[4]-h[2]*P^2
即L到R之间的哈希值为 h(R)-h(L-1)*P^(R-L+1) 题里这个P的次方用数组p[]存 需要初始化一下
P一般取131
防止长度过长本需mod Q
unsigned long long来存储h 它可以溢出 溢出时就相当于模了一个2的64次方
1 | #include<bits/stdc++.h> |
一般比较字符串就用这个方法
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hello Flu1t!