- 2024-10-24扩展KMP
前言扩展KMP又称Z函数,可以快速的求出一个字符串的每一个后缀的与其的LCP(最大公共前缀)长度。至于为什么要学习exKMP,因为(数据规模很上进)我们都是上进的OIer。算法思路暴力朴素的算法将\(n\)个字符的字符串S中第\(i\)位开始的后缀与S的开头一一比较,求出LCP数组Z。CODEfor(int
- 2024-08-13从KMP到exKMP
KMP(Knuth-Morris-Pratt)用途:用于一个文本串S内查找一个模式串P的出现位置,以及求一个字符串的最小循环元长度和最大循环次数。思路:\(kmp\)是对原始的在文本串S内查找一个模式串P的出现位置的一种优化。原始做法将\(s\)的每一位都与\(p\)的第一位开始匹配。(匹配到\(s\)的
- 2024-08-10KMP&exKMP
(之前学的一些东西都没打笔记,给忘的差不多了。从这个开始要记得写笔记了。)注意事项:所有的字符串的下标从1开始。KMP对于一个字符串s,定义它的前缀数组a,其中a[i]表示子串s[1...i]前缀与后缀相同的最大长度(不包括串自身)。对于朴素的算法,自然是n^2的暴力。考虑利用前面位置的值
- 2024-07-18扩展 KMP/exKMP(Z 函数)学习笔记
声明本文章转载自shangruolin的博客,已经过作者(存疑)同意,帮TA宣传一下。扩展KMP/exKMP(Z函数)学习笔记兼P10479匹配统计题解。LCP:最长公共前缀。Z函数,又称扩展KMP(exKMP),能够在\(O(n)\)的时间内求出一个字符串与其所有后缀的LCP的长度。定义\(z_i\)为字符串\(s\)
- 2023-12-26【CF30E】Tricky and Clever Password 题解(manacher + exKMP)
manacher+exKMP+二分。感觉是最粗暴的方法,想出来之后自己硬莽了4k,荣获题解区最长。Solution约定:下文所提及到的所有的回文串,均指奇长度回文串。显然把题目拆成两个部分,中间的回文串,以及两边相同的连续子串。考虑一下从哪个入手比较好。忘记是咋想的了,易得从两边相同
- 2023-12-21Manacher与exKMP(扩展KMP,Z函数)
Manacher算法该算法由GlennK.Manacher在1975年提出,首先注意到回文串的对称中心特性可能有所不同(中心可能为一个字符或者是在两个字符之间),那么我们将字母之间插入隔板,这两个回文串的对称中心就都在一个字符上了,suchas"|A|B|B|A|"、"|A|B|C|B|A|"过程对于一个回文串,有且
- 2023-12-21扩展 KMP/exKMP(Z 函数)
模板链接QwQZ函数,又称扩展KMP(exkmp),可以\(O(n)\)求出一个字符串的所有后缀与这个字符串的LCP长度。怎么叫做扩展KMP但是前置知识没有KMP,Z函数的做法与Manacher有着异曲同工之妙,即存下了目前已扩展到的右端点最靠右端的后缀\(i\)与原串的LCP:\([i,i+Z[i]-1]\)
- 2023-10-20【模板】扩展 kmp (exkmp) / Z 函数
求出一个字符串\(s\)的每个后缀与原串的LCP。首先由显然的SAM做法。考虑线性。考虑维护区间\([l,r]\)表示\([l,r]=[1,r-l+1]\)是最右的匹配段。考虑新的\(i\),如果满足\(l\leqi\leqr\),则\(i\)可以直接取\(i-l+1\)的答案继续扩展,否则继续扩展。最后更新区间。
- 2023-08-22算法学习-exKMP
什么是exKMPexKMP(Z-Algorithm)是一个可以在\(O(|S|+|T|)\)的时间复杂度内求出\(T\)串的每个后缀与\(T\)的LCP(最长公共前缀)\(T\)串和\(S\)串每个后缀的LCP。的算法。算法过程首先回忆一下KMP算法,求\(nxt\)数组和两串匹配本质上没啥区别。所以我们尝试也将
- 2023-06-17单模字符串匹配算法(KMP, exKMP, manacher)
约定:本文字符串均从\(1\)开始。模式串\(T\)的长度为\(n\),匹配串\(S\)的长度为\(m\)。1.KMP1.1前缀函数给定一个长度为\(n\)的字符串\(S\),其前缀函数被定义为一个长度为\(n\)的数组\(\pi\)。其中\(\pi_i\)被定义为:若子串\(S[1\cdotsi]\)有一对相等的真前
- 2023-06-01z函数|exkmp|拓展kmp 笔记+图解
题外话,我找个什么时间把kmp也加一下图解z函数|exkmp别担心这个exkmp和kmp没毛点关系,请放心食用。本文下标以1开始,为什么?因为1开始就不需要进行长度和下标的转换,长度即下标。定义给出模板串S和子串T,长度分别为n和m,对于每个ans[i](1<=i<=n),求出S[i...n]与T的最长公共前缀长
- 2023-04-20kmp + exkmp
kmp:主要就是用于暴力回退的优化一般的暴力回退总是回退到前一个,要枚举很多次如果找到规律那么就会发现可以找到上一次最大匹配的位置然后将继续匹配知道匹配不下去然后去更新代码kmp是前缀到某一个为停止#include<bits/stdc++.h>usingnamespacestd;intn,m;intnx
- 2023-02-14从KMP到ExKMP
KMPKMP算法全称Knuth-Morris-Pratt算法,可以在\(O(n+m)\)的时间复杂度下进行在长度为\(n\)的字符串中查找另一个长度为\(m\)的字符串出现的所有位置,同时也能在\(O(n)\)
- 2023-02-04exkmp
字符串算法参考:BilibiliT为文本串(被匹配),P为模式串(进行匹配的串)真前缀:前缀但不包含整个字符串真后缀同理kmp算法KMP算法考虑T的每个前缀的每个后缀和P的前
- 2022-11-25字典树、kmp、exkmp
一、字符串相关知识1、字串:连续区间的串2、子序列:可以不连续的串,但是相对位置要保持一致3、sprintf、sscanf(对char类型而言)4、stringappend(s,pos,n)//将字符串