随笔分类 - 字符串
摘要:这不就是哈希板子吗? 就是由于你串的数量很少,因此完全可以 \(O(\lvert S \rvert N)\) 做, \(N\) 是串的数量。 直接算一下匹配串的哈希值,然后枚举模式串的每一位查前面能不能接上就行。最后答案就是最后那个能接上的位置。细节也没什么问题。 #include <bits/st
阅读全文
摘要:听术曲做题浪费了好多时间qwq 一开始写了一个什么 manacher + 线段树的闹弹代码 后来发现答案其实就是由回文串拼成的字符串的数量。 因此暴力dp就行啦? 这篇文章主要还是讲一讲时间复杂度吧。 我们拿一个 \(lst_i\) 表示第 \(i\) 个字符前面第一个回文串,\(dp_i\) 表示
阅读全文
摘要:一开始看成长度了,那这题就超级水了。 你可以知道的一个事情,就是每对不重合前后缀都是包含在最长不重合前后缀里的。也就是说每个前缀的不重合前后缀的数量是 他从当前位置往前跳的次数。 我们先想一个朴素的方法,就是每个位置跳一下,然后暴力判是否重合。 #include <bits/stdc++.h> #d
阅读全文
摘要:真心看不懂你谷的题解,进行思考之后决定自己写一篇。 首先我们要求的循环节一定公共前后缀为空,这很好理解对罢。 因为如果你的循环节有一个公共前后缀,很显然存在长度更小的解。 比如: \(aabaa \rightarrow aab\) \(aab(可以用更小的循环节拼出来)\) 我们设这个循环节长度为
阅读全文
摘要:直切正题,这个算法基本就是用 \(O(n)\) 的复杂度查一个字符串内的最长回文。 这个东西其实和 KMP 有很多相似的地方,如果已经对 KMP 有了解的同学对这个肯定能起手的快些。 正篇 首先,明确一个数组的含义 \(d_i\) 表示以 i 为中心,向两边扩展回文的半径。 这个东西是包括 i 本身
阅读全文

浙公网安备 33010602011771号