• 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)//将字符串