![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
【字符串】SA/后缀数组
文章平均质量分 73
[字符串]
A_zjzj
衢州华茂外国语学校郑钧
展开
-
洛谷 P4022 [CTSC2012]熟悉的文章 / YbtOJ「字符串算法」第3章 后缀自动机 J. 相似子串 题解--zhengjun
题目大意给定 nnn 个主串和 mmm 个询问串。对于每个询问串,求出最大的 lll,使得存在一种将当前询问串拆分成若干个长度 ≥l\ge l≥l 且在任一主串中出现过的子串的方案。思路蒟蒻还是不会广义后缀自动机,所以我们就用 SA + st 表 + 二分 + 单调队列解决这道问题。首先,可以用 SA + st 表求出每一个询问串的任意一位为左端点时,最大的在主串中出现过的子串的长度。可以直接在 sasasa 数组上记录前后第一个是主串的后缀的位置,然后前后求 LCPLCPLCP 取 max\原创 2022-05-30 21:09:10 · 127 阅读 · 0 评论 -
洛谷 P3649 [APIO2014]回文串 / YbtOJ「字符串算法」第3章 后缀自动机 H. 回文匹配 题解--zhengjun
思路蒟蒻不会 SAM,所以只好用 SA + Manacher + st 表 + set + 单调栈 + 双指针的笨重做法了。首先处理出每个点为中心的最长回文串长度 oddiodd_ioddi,以及以 iii 和 i+1i+1i+1 为中心左右对称的最长回文串长度 evnievn_ievni,这一步可以用 Manacher 轻松搞定。接着求出以 iii 为左端点最长的回文串长度,就是一个区间修改,最后单点查询,可以用线段树或者在 st 表上面打标记之后下推到最底层也可以。然后再对于原串跑一次 SA原创 2022-05-24 20:52:38 · 244 阅读 · 0 评论 -
YbtOJ「字符串算法」第3章 后缀自动机 F. 广义后缀树 --zhengjun
题目大意给定 nnn 个模板串,以及 mmm 个查询串,依次查询每一个查询串是多少个模板串的子串。思路蒟蒻不会广义 SAM,所以只能用 SA + 莫队的高复杂度笨重算法通过了。首先把每个模板串和查询串拼接在一起(中间用不同的字符隔开),然后跑一遍 SA,对于每个查询串,记 iii 为该查询串的后缀编号,lenlenlen 为该查询串的长度,那么就是要找到所有的 jjj,使得 LCP(i,j)≥lenLCP(i,j)\ge lenLCP(i,j)≥len,显然这样的 jjj 的后缀排名 rkjrk_j原创 2022-05-25 20:46:20 · 138 阅读 · 0 评论 -
YbtOJ「字符串算法」第3章 后缀自动机 I. 独特子串 题解--zhengjun
题目大意给定 nnn 个字符串,求出每个字符串只属于该字符串的本质不同的非空子串的个数。思路如果没有做过这道 SA 入门题《不同子串个数》,那么请先了解这道题的 SA 做法。首先老套路,把所有字符串拼接在一起。然后单独考虑一个字符串 iii,首先求出这个字符串的每一个后缀有多少个前缀没有在其他字符串中出现过,假设当前在求排名为 iii 的后缀的值,那么就需要知道排名在 iii 前面的第一个后缀 sajsa_jsaj 与后缀 saisa_isai 不在同一个字符串里(即求出最大的 prei=jp原创 2022-05-26 21:02:30 · 160 阅读 · 0 评论