字符串hash
[问题]:为什么使用131,或者131313
hash[i]=hash[i-1]*131+'a';
理解就是hash[i-1]的小变化对于131313得到的结果有更大的改变
所以当出现错误的时候,就可以通过改变质数的方法来减小hash冲突
[问题]:为什么要用long来存hash
首先 如果是int当只要大于int就会溢出,几倍溢出就有可能发生hash冲突,所以可以使用long来减少hash冲突
[推理]
对于字符串s1s2s3s4s5
对于s3s4
hash[s3s4]=s3*p+s4
可以得出结论
hash[从l到r的字符串]=hash[r]-hash[l-1]*p^(r-l+1)
而一般来说p^(r-l+1)可以直接在求hash值的时候就顺便求
练习如下:
【宫水三叶】一题四解 :「卡常」&「上下界性质」&「KMP」&「字符串哈希」 - 重复叠加字符串匹配 - 力扣(LeetCode) (leetcode-cn.com)