KMP模板推导
两串匹配问题
假设我们有两个长度分别为
枚举左端点暴力匹配的复杂度最坏是
但是我们发现,对于前面的匹配区间,后面的匹配区间和它可能有两种关系:
- 无交
两者求解独立,同时不影响复杂度。 - 有交
相交部分对于前面的区间是个后缀,对于后面的区间是个前缀。
但是这前、后两个区间都是能和 串匹配的。
所以相交部分就是 的一个 。
所以我们现在就要知道一些
关于 的性质以及具体匹配方法
关于
对于一个串,它
的 也是它的 。
假设我们在
由于后面的匹配区间和
但是这个
为了方便处理,我们考虑先将当前变成最大的那个
现在问题是怎么维护。考虑维护一个最大
相对应的为了满足条件,我们会尝试不断地让
当
现在问题就只在于,怎么对每个
求 每个前缀的最长
我们记要求解的东西——所有
一个对
数组的理解: 表示的不只是 的最长 ,也是在当前无法匹配第 个位置时的失配指针。
我们考虑增量法求解。每次利用前面的信息处理
具体的,在尾部加入一个字符后,可能会有一些原本是
故而我们利用已有的所有
复杂度
空间复杂度
时间复杂度,考虑每次右端点往右移动
而每次跳
故而均摊时间复杂度为
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!