随笔分类 -  字符串

摘要:有时,会遇到特殊字符串匹配。 第一种 通配符。 这时通常要用NTT。 记两个字符串的差距为Ai×Bi×(AiBi)2。 若每个位置的差距之和为0,则字符串相等。 若是通配符,把Ai/Bi变为0即可。 把式子拆开后,反转其中一个串,用NTT优化计算。 第 阅读全文
posted @ 2020-10-06 16:53 lnzwz 阅读(315) 评论(0) 推荐(2) 编辑
摘要:回文自动机是接受一个字符串的所有回文子串的自动机。 回文自动机中每个点代表原串的一个回文子串。 维护两种指针:transfail。 点 xtrans[x][c] 指针指向在这个点代表回文串两端同时加字符 c 后得到的回文串。 fail 指针指向 阅读全文
posted @ 2020-02-04 22:02 lnzwz 阅读(505) 评论(0) 推荐(0) 编辑
摘要:题意: 对于一个给定的长度为n的字符串,求出它的第k小子串。 有参数t,t为0则表示不同位置的相同子串算作一个,t为1则表示不同位置的相同子串算作多个。 题解: 首先,因为t的原因,后缀数组较难实现,这里不讨论。 使用后缀自动机: 因为,这里需要按字典序考虑子串,所以要使用trs指针。 首先,计算出 阅读全文
posted @ 2019-10-01 21:59 lnzwz 阅读(679) 评论(0) 推荐(0) 编辑
摘要:坑 阅读全文
posted @ 2019-09-20 19:59 lnzwz 阅读(249) 评论(0) 推荐(0) 编辑
摘要:例题: 往事太多,有时候忘了就忘了吧。 如果有非记不可的,就只能用点附加手段啦! 我们定义一棵往事树是一个 n 个点 n 1 条边的有向无环图,点编号为 1到 n,其中 1 号点被称为是根结点,除根结点以外, 每个点都恰有一条出边(即以其作为起点的边)。 每条边上有 1 个字符(这里我们实际上用一个 阅读全文
posted @ 2019-08-18 11:05 lnzwz 阅读(241) 评论(0) 推荐(0) 编辑
摘要:"题目链接" 先考虑68分的做法: 求在A串中出现,且在B串中没出现的串的数量。 使用容斥,用A的不同子串数减去A,B的不同公共子串数。 先用双指针,求出A的每个位置开始,在B中最多能向后匹配多远。 然后,问题变为,给你一些区间,问它们的子区间中有多少不同的串。 因为每个串,都是原区间[l,r] 阅读全文
posted @ 2019-08-14 21:07 lnzwz 阅读(180) 评论(0) 推荐(0) 编辑
摘要:"题目链接" 题意:有一个字符串,初始为空,n次操作,每次可以添加一段字符到末尾或回到第x次操作之后的状态。每次操作后,输出所有前缀的next之和。 首先,那个撤销操作可以离线,建版本树解决。 既然求的是最长公共前后缀,自然想到用KMP。 模仿KMP的过程:记录每次添加后的串的next,中间的nex 阅读全文
posted @ 2019-08-13 20:42 lnzwz 阅读(180) 评论(0) 推荐(0) 编辑
摘要:[toc] 后缀数组是一种处理字符串的算法。 它可以将所有后缀按字典序排序,并求出任意2个后缀的最长公共前缀。 首先将所有后缀排序,因为后缀有这样的性质:任意一个后缀都可以拆分成另一个后缀和一个子串,且一个子串也可以拆分成其他子串,所以可以采用倍增算法对所有后缀进行排序,方法如下:(分若干步) 第k 阅读全文
posted @ 2019-07-25 19:36 lnzwz 阅读(203) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示