字符串入门
复习用。
常用算法
字符串哈希。
匹配: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
浙公网安备 33010602011771号