字符串哈希 学习笔记

两种哈希的表示方式。
\(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}}\)

相关题目:

posted @ 2024-10-23 09:17  coding_goat_qwq  阅读(3)  评论(0编辑  收藏  举报