随笔分类 - KMP
摘要:在一个Text串中找出Pattern串E以满足EAEBE,A B可以是任意串 看一眼觉得woc好难,后来看一下样例AB为空也可以 找观察一下E既是前缀也是后缀,很容易联想到next 最优情况EEE,那就是3 × next[j] == j A,B任取,那只要进一步保证 3 × next[j] 0&&P
阅读全文
摘要:https://www.cnblogs.com/chenxiwenruo/p/3546457.html
阅读全文
摘要:只要KMP里对f[i]进行限制即可
阅读全文
摘要:```C++
/*H E A D*/
int nxt[maxn];
char P[maxn];
void buildNext(){ nxt[1]=0; int j=0,m=strlen(P+1); rep(i,2,m){ while(j&&P[i]!=P[j+1])j=nxt[j]; if(P[i]==P[j+1])j++; nxt[i]=j; } }
int main(){...
阅读全文
摘要:如果循环节存在那在前缀部分也肯定存在 如果循环节存在那至少是可以匹配的 而next是维护最大前缀的,意会意会 注意一定要先判整除,即使别的题目保证是存在循环的 特意画了一张灵魂草图帮助理解
阅读全文
摘要:题目的匹配应该也要看成一个文本串与另一个模式串的匹配过程 Text是以当前i结尾的后缀来匹配Pattern的前缀(非真) 这里的Pattern肯定是可以匹配成功的,直接由next来保证(next总是当前结尾的最大前缀,恰好满足递推的需要) (说的不是很准确,就是kmp匹配过程时使用的方法) 举个栗子
阅读全文
摘要:循环移位的套路操作就是一份折开变两份 C++ / H E A D / void match(){ int n=strlen(T+1); int m=strlen(P+1); int j=0; rep(i,1,n){ if(flag)break; while(j 0&&(j==m||T[i]!=P[j
阅读全文
摘要:```C++
/*H E A D*/
int nxt[maxn],f[maxn],ans;
char T[maxn],P[maxn];
void init(){ int m=strlen(P+1); int j=0; nxt[1]=0; rep(i,2,m){ while(j>0&&P[i]!=P[j+1]) j=nxt[j]; if(P[i]==P[j+1])j++; nxt...
阅读全文