Loading

[笔记] 字符串哈希

Hash 的思想

Hash 的核心思想在于,将输入映射到一个值域较小、可以方便比较的范围。

这里的 “值域较小” 在不同情况下意义不同。

在哈希表中,值域需要小到能够接受线性的空间与时间复杂度。

在字符串哈希中,值域需要小到能够快速比较。

同时,为了降低哈希冲突率,值域也不能太小。

Hash 的实现

预处理前缀 hash 值:

for(int i = 1; i <= n; ++i) h[i] = ((LL) h[i - 1] * base % mod + s[i]) % mod;

获取子串 \(s(l,r)\) 的hash 值:

h[r] - h[l - 1] * qpow(base, r - l + 1);

Hash 的应用

  • 字符串题目中的应用;
  • 判断一个括号串的某个区间是否是合法串,用 hash 判断经过这个区间前后栈的情况是否一致;
  • 通过二分求 lcp,在很多需要比较的解题中被使用。

题目

[Cerc2015]Juice Junctions

clotho

posted @ 2022-02-16 10:34  IrisT  阅读(37)  评论(0编辑  收藏  举报