字符串哈希 学习笔记
两种哈希的表示方式。
设 \(s_i\) 为字符串内第 \(i\) 位,\(h_i\) 表示字符串内 \([1,i]\) 的哈希值,\(p\) 为模数,那么第一种哈希方式是 :
- \(h_i=h_{i-1}*p+s_i\),即把 \(h_i\) 当作一个 \(p\) 进制数,加入 \(s_i\) 时在数的末尾。
- \(h_i=h_{i-1}+s_i*p^{i-1}\),即是在开头加入 \(s_i\)。
如何查询呢? - 对于第一种,我们相当于要先把 \(s_j\) 后面的剪掉,再把 \(s_i\) 前面的剪掉,于是区间 \([i,j]\) 的哈希值为 \(h_j-h_{i-1}\times p^{j-i+1}\)。
- 对于第二种,我们相当于把 \(s_j\) 的前面和 \(s_i\) 的后面剪掉,于是即为 \(\frac{h_j-h_{i-1}}{p^{i-1}}\)。
相关题目:
本文来自博客园,作者:coding_goat_qwq,转载请注明原文链接:https://www.cnblogs.com/CodingGoat/p/18494393