- 当需要维护一个子串的哈希值,可以用哈希前缀和:\(hash_{l-r} = pre_r - pre_l \times base^{r - l + 1}\)。
- 哈希常搭配二分使用。
- \(gp\_hash\) 十分快。
- 当 \(\sum len_i \le 10^5\) 时,它的长度的种类数是 \(\sqrt n\) 级别的。
- 当 \(n \le 10^5\) 时,可以考虑 \(O(n\sqrt n)\) 的做法。
- 线段树,树状数组都可以维护哈希。
- 哈希的题目基本绕不开四个基本问题:字符串匹配,最长回文子串,最长公共子串,字符串中不同子字符串的数量。
- 字典树上的最长公共前缀所在的点是两个串的 \(LCA\)。
- \(Trie\) 树是一棵多叉树,只要先序遍历整棵树,输出相应的字符串便是按字典序排序的结果。
- \(01trie\) 长用来处理异或和之类的问题。
- 在 \(trie\) 树上全局加一实际上是对每一个数找到最低位的一个零,然后对它以下的位数进行翻转操作,可以通过交换左右儿子,然后递归 \(0\) 儿子实现。
- 求周期的数量等价于求 \(border\) 的数量。
- \(manacher\) 可以求出对于任意一个左右端点,它可以拓展的最长长度,P4555 [国家集训队] 最长双回文串。
- 当一个问题有多个字符串时,可以考虑建一棵 \(trie\) 树。
- 字符串哈希要加一。
- 当需要最小化字符串的字典序时,可以考虑按位考虑,每一位从 \(a-z\) 贪心考虑。P9694 [GDCPC 2023] New but Nostalgic Problem