![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串(杂)
UniverseofHK
事情留在今天,时间送给明天
展开
-
KMP+扩展KMP
KMPnext数组表示P[j]以前最长相同前缀后缀若下标从0开始(以下模板就采用这种方式),next[ i ] 表示前面长度为 i 的字符串前缀和后缀相等的最大长度为 next[ i ] 。若下标从1开始,则next[ i ] 表示前面长度 i - 1的字符串中前缀和后缀相等的最大长度为 next[ i ] - 1两种方式当S[i]与P[j]不同时j都应该移动到next[j]const ...原创 2019-05-04 10:54:24 · 626 阅读 · 0 评论 -
字典树(Trie树)
字典树(Trie树,单词查找树)基本要点根节点不包含字符,除根节点外每一个节点都只包含一个字符;从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;每个节点的所有子节点包含的字符都不相同。基本操作查找、插入、删除实现过程从根节点开始搜索(先记住开头);将单词的每个字母一一进行取出并进行操作(各种操作);实例分析Phone List(HDOJ 1671)...原创 2019-03-05 18:27:13 · 225 阅读 · 0 评论 -
Manacher算法
洛谷-P3805板子题关键点:要有两个字符串,且处理后的字符串长度略大于原串2倍p数组的更新mid和r的转移//#pragma comment(linker, "/STACK:102400000,102400000")#include "bits/stdc++.h"#define pb push_back#define ls l,m,now<<1#define r...原创 2019-07-28 16:07:44 · 99 阅读 · 0 评论 -
洛谷-P4287 双倍回文(Manacher)
双倍回文串Manacher算法用的还是不够熟悉啊,被卡了好久。。。一会再写个回文自动机的做法吧题意:若一个回文串左半部分和有半部分分别为一个回文串,则这个回文串被称为双倍回文串(这名字有点傻呀!)。求:给定一个回文串,问最长的双倍回文串有多长。思路:由于双倍回文串是建立在回文串的基础上的,因此我们只需要对回文串动动手脚就行了思考:若在Manacher算法处理好字符串后再对回文串进行判定...原创 2019-08-04 23:02:13 · 234 阅读 · 0 评论 -
Distinct Substrings(扩展KMP)
Distinct Substrings写完这题发现自己曾经的扩展KMP板子(ZZZ函数)太laji了!现在的板子简洁又漂亮,并且这题很妙!题意:给定一个长为nnn的数字串,问在尾部独立的添加111~mmm这些数字分别会使原串增加多少本质不同的子串思路:看到本质不同,首先想到了后缀自动机,每次在结尾插入元素后只需要知道插入元素的父节点是谁,然后利用len[np]−len[fa[np]]l...原创 2019-10-02 09:18:47 · 171 阅读 · 0 评论 -
扩展KMP(Z algorithm)
重新记录一个板子字符串下标从000开始(也可以很容易得改成从111开始)ZZZ数组的Z[0]Z[0]Z[0]不是良定义的,默认为000;如果有必要,可以在getZ()getZ()getZ()的最后进行Z[0]=nZ[0]=nZ[0]=n的修改S[j,j+z[j]−1]S[j,j+z[j]-1]S[j,j+z[j]−1]表示右端点最靠右的已匹配串求ZZZ数组的关键在于尽可能利用已求出的ZZ...原创 2019-10-02 09:36:00 · 123 阅读 · 0 评论