字符串学习笔记

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$ 过程

posted @ 2021-07-06 22:43  wxg_Jay  阅读(17)  评论(0)    收藏  举报