字符串入门

复习用。

常用算法

字符串哈希。

匹配:KMP、exKMP、ACAM、SAM、SA、Border Theory。

回文:Manacher、PAM。

广义 KMP

统计定长子串的信息。

定义一个广义的“匹配”(例如:对 \(i\in[1,m]\) 规定长为 \(m\) 的子串第 \(i\) 个字符的绝对排名,匹配一段前缀时检查相对排名,即原串和排名串相对大小一致),要求失配时的贪心与 KMP 一致。

跑 KMP,跳 fail 时可以一步步撤销,故只需实现向右扩展一位或向左删除一位(栈的撤销),可以用 DS 维护是否匹配。当然如果能直接判定能否匹配就无需一步步撤销了。

例题:P4696 [CEOI 2011] Matching

广义 Manacher

统计所有子串的信息,基于:本质不同回文子串数量为 \(O(n)\)

定义一个广义的“回文”(例如:对称位置的字符互相匹配,要求每种字符都只匹配一种字符),要求回文串内位置对称的两个子串,可以快速用前面那个推出后面的答案。

那么跑 Manacher,若当前可以提前跳就看会否跳出回文串边界,跳出去就暴力缩回来(在左边那个串的基础上缩,缩完再对称过来)。更新手上的回文串时,若右边界相等,要取中心靠右(新)的那个。时间复杂度为 \(O(n)\)

例题:2024 SC 省集 Day3 T1、P12977 泪雨 Namid[A]me

2025.11.26

posted @ 2025-11-26 09:17  FirCone  阅读(3)  评论(0)    收藏  举报