随笔分类 -  字符串

字符串算法小结
摘要:KMP 字符串单模匹配算法。 $S$是模板串,$T$是文本串,$next(i)$表示字符串$T[1...i]$的所有后缀中还是$T$的前缀的最长的长度,失配时利用$next(i)$转移即可。 时间复杂度为均摊$O(|S|+|T|)$。 Manacher 求一个字符串的所有回文子串。 记$maxrig 阅读全文

posted @ 2019-06-25 18:17 ErkkiErkko 阅读(197) 评论(0) 推荐(0)

[十二省联考2019]字符串问题:后缀数组+主席树优化建图
摘要:分析 蒟蒻不会$SAM$,只好来一发主席树优化建图的题解。 令$N$为原字符串的长度。首先我们考虑一个最基本的思路,我们发现$A_j$能接在$A_i$后面当且仅当存在一个$B_k$被$A_i$支配且是$A_j$的前缀。考虑建图,如果$A_i$支配$B_j$,那么从$A_i$向$B_j$连一条单向边, 阅读全文

posted @ 2019-04-08 10:11 ErkkiErkko 阅读(408) 评论(0) 推荐(0)

[CF666E]Forensic Examination:后缀自动机+线段树合并
摘要:分析 用到了两个小套路: 1. 使用线段树合并维护广义后缀自动机的$right$集合。 2. 查询$S[L,R]$在$T$中的出现次数:给$T$建SAM,在上面跑$S$,跑到$R$的时候先判匹配长度是否$\geq R L+1$,如果是则跳parent使$maxlen(x) \geq R L+1$的前 阅读全文

posted @ 2019-02-27 22:27 ErkkiErkko 阅读(188) 评论(0) 推荐(0)

[BZOJ3796]Mushroom追妹纸:后缀自动机+KMP
摘要:分析 这道题有个$O(n)$的后缀自动机做法,感觉很好理解就在这说一下。 先对$s1$和$s2$求最长公共子串,对于$s2$的每一个下标$i$,求一个$f[i]$表示以$s2[i]$结尾的最长匹配长度。 KMP求出$s3$在$s2$上的所有结束位置,然后扫一遍$s2$统计答案,很简单。 代码 cpp 阅读全文

posted @ 2019-01-11 16:18 ErkkiErkko 阅读(152) 评论(0) 推荐(0)

重复旋律:后缀数组+后缀自动机
摘要:后缀数组(SA) hihoCoder 1407 : 后缀数组二·重复旋律2 题意 一段旋律中出现次数至少为两次的不重叠旋律最长是多少? 分析 还是二分答案后挖去$height[i]=mid){ minpos=std::min(minpos,sa[i]); maxpos=std::max(maxpos 阅读全文

posted @ 2018-12-14 00:36 ErkkiErkko 阅读(314) 评论(0) 推荐(0)