字符串学习笔记
KMP
字符串匹配
核心思想:
1.求最长公共前后缀,进行到 $i + 1$ 时,设 $i$ 位最长公共前后缀长度为 $kmp[i]$ ,不断跳 $kmp$ 直到下个字母匹配为止。
2.匹配其它串,不断跳 $kmp$ ,等价于整体平移。
Trie
略
子序列自动机
略
Manacher
记录当前最右端点 $r$
若 $i>r$ 暴力 $k=1$ 拓展
否则根据对称性 取 $k=min(d[l+r-i],r-i)$ 后暴力拓展
及时更新,初值 $l=0,r=-1$ 更方便
字符串 Hash
$h[i]=h[i-1]*base%mod+s[i]$
相当于看做 $base$ 进制数
区间:$h[r]-h[l-1]*base^{r-l+1} \ -> \ [l,r]$
AC自动机
Trie 图:本来指向空节点的指向最长存在后缀的下个节点
fail:最长的后缀匹配其它位置
以 $0$ 为根的 $fail$ 树,随便乱搞,反向可 $topsort$
建自动机类似 $KMP$
优化:
非 $0$:$fail[trie[u][i]]=trie[fail[u]][i]$
否则 $trie[u][i]=trie[fail[u]][i]$
相当于建出 $Trie$ 图来优化跳 $fail$ 过程

浙公网安备 33010602011771号