KMP
。十二。
这个作者很懒,什么都没留下…
展开
-
【Ybtoj 第8章例题4】子串拆分【KMP】
解题思路——因为一个数组开小了调了1个小时,我无语了啊啊啊啊啊…TOT这道题因为数据不大,可以直接跑 n2n^2n2。考虑枚举左端点,设左端点为l,S=C[l,∣C∣]l,S=C[l,|C|]l,S=C[l,∣C∣],那么对字符串S跑一次KMPKMPKMP。然后在统计过程中,假设现在在i位置,则S[1,j]=S[i−j+1,i]S[1,j]=S[i-j+1,i]S[1,j]=S[i−j+1,i]。如果j∗2>=ij*2>=ij∗2>=i,那么令j=p[j],此时A[1,...原创 2021-03-11 19:42:32 · 129 阅读 · 0 评论 -
【Ybtoj 第8章例题1】子串查找【KMP】
解题思路研究KMP研究了一上午。。看了好多博客觉得这篇最好!KMP算法详解<<代码#include<iostream>#include<cstdio>#include<iomanip>#include<cstring>#include<algorithm>#include<cmath>using namespace std;char a[1000010],b[1000010];int...原创 2021-03-06 11:42:11 · 146 阅读 · 0 评论 -
【Ybtoj 第8章例题2】重复子串【KMP】
解题思路处理出数组ppp,设字符串长度为nnn,则模式串第111位到第p[n]p[n]p[n]位与模式串第n−p[n]n-p[n]n−p[n]位到第n位是匹配的。所以如果nmod(n−p[n])==0n mod (n-p[n])==0nmod(n−p[n])==0,则存在重复连续子串,长度为n−p[n]n-p[n]n−p[n],循环次数为n/n−p[n]n/n-p[n]n/n−p[n]代码#include<iostream>#include<cstdio>#i...原创 2021-03-06 14:55:08 · 86 阅读 · 0 评论 -
【Ybtoj 第8章例题3】周期长度和【KMP】
解题思路手推一下发现如果前缀存在一个长为j的公共前后缀,那么它有一个长为i-j的周期。jjj可以通过KMPKMPKMP得到,周期最长也就是jjj最小。代码#include<iostream>#include<cstdio>#include<iomanip>#include<cstring>#include<algorithm>#include<cmath>using namespace std;ch...原创 2021-03-11 19:45:26 · 107 阅读 · 0 评论 -
(纪中)4624. 字符串匹配【KMP】
解题思路超开心!!终于A了一道题!!原本可以再A一题的啊啊啊啊!!!涉及到公共子串,直接上KMP。先算出每一个b中有几个a,但是我们发现将b倍长n倍后,首尾相接处可能还有a。于是可以处理两倍b中含a的个数w和一倍b中含a的个数ww,然后代码#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>#define ...原创 2021-07-22 16:35:27 · 105 阅读 · 0 评论 -
【洛谷 P3375】 【KMP】KMP字符串匹配
题目描述给出两个字符串 s_1和 s_2,若 s_1的区间 [l, r][l,r] 子串与 s_2完全相同,则称 s_2在 s_1s1 中出现了,其出现位置为 ll。现在请你求出 s_2s2 在 s_1s1 中所有出现的位置。定义一个字符串 ss 的 border 为 ss 的一个非 ss 本身的子串 tt,满足 tt 既是 ss 的前缀,又是 ss 的后缀。对于 s_2s2 ,你还需要求出对于其每个前缀 s’s′的最长 border t’t′的长度。输入格原创 2020-10-27 17:34:23 · 639 阅读 · 0 评论