就 P9196 浅谈一类字符串的前后缀匹配问题

P9196 [JOI Open 2016] 销售基因链

\(n=\sum|S|+\sum|P|+\sum|Q|\)

\(\bm {O(n\log n)}\):正反串建树

对正串反串分别构建字典树,问题转化为统计两棵树上分别在某个点子树下的字符串数量,离线二维数点。

\(\bm {O(n)}\):字典树扫描

正串建字典树,询问形如 \([l,r]\) 内的字符串包含 \(Q\) 的个数。差分一下,扫过去。

\(\bm {O(n)}\):字典树合并

对正串建字典树,维护子树内后缀信息。DSU on Tree 可以做到 \(O(n\log n)\),字典树合并可以做到 \(O(n)\)

\(\bm {O(n)}\):自动机匹配

把待匹配串复制一遍,形如 \(S\ \$\ S\),其包含前缀 \(P\) 与后缀 \(Q\) 转化为包含子串 \(Q\ \$\ P\)。新串拼接起来自动机匹配或者 SAM 维护即可。

posted @ 2023-06-11 15:42  Network_Error  阅读(46)  评论(0)    收藏  举报