![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串
Boxxxxxxx
只与自己做对比。
展开
-
字符串科技总结之KMP详解
定义一个东西Border的定义说人话就是对于一个字符串,前后缀相等的长度的字符串,比如BAAB,Border的有效取值是1,2的字符串,因为B=B,BA = BA,注意这里前后缀等的长度是可以让前后缀相等的地方重叠的,比如AAA,Border的可供选择的数字是1,2的字符串,但是不能取到3,Border长度必须严格小于字符串总长。KMP的next[i]数组的含义就是字符串[1,i]的最大Bborder.首先关于next[i]也就是next[i-1]延伸过来的。要找到[1,i]的字符串的最大前后缀相原创 2020-07-20 17:44:24 · 263 阅读 · 0 评论 -
CF346B kmp+dp
这道题应该是比较典型的利用kmp去dp的题目。我们思考题意他要求我们的子序列不能够和virus串完全匹配,那么我们就可以在原先求最长公共子序列的基础上在加一个维度。就是f[i][j][z],第一个串枚举到i,第二个串枚举到j,然后他们与virus串匹配的长度是z。接下来思考转移。第一个串当做A数组,第二个串当做B数组即当(A[i] == B[j])的时候可以在原先已经有的子序列基础上加上字符A[i],这个时候与virus匹配到的长度是z。那么这个长度z是由谁转移来的?这个地方需要kmp去预处理。原创 2020-06-06 10:25:08 · 280 阅读 · 0 评论 -
CF547E 二分+sa+主席树
这提供一个sa+主席树的做法,这个用做法就你顺势可以在敲掉基本一样的洛谷P4084题意询问的是k串在[L,R]的串里面出现了多少次,不同位置算多次。对于一个串在SA里的位置以及和他最像的位置必然是连续的(字典序的原因),然后对于每一个串就都可以二分出一个区间,这个区间内的串都有和当前串相同的前缀。那么我们知道这个区间后,怎么知道询问要求的区间有多少个是落在能够使用的区间呢?这就是可以利用主席树。我们让rk为权值去建立主席树,然后按字符串长度的顺序去插入,然后询问的时候我们就可以直接询问主席树上某个区原创 2020-06-05 09:14:26 · 174 阅读 · 0 评论 -
洛谷p5555 PAM回文树
其实我是看题解都是建两颗PAM和BFS感觉没必要就来发个题解,首先我们知道PAM上的节点就是一个回文串对不对,然后题目要求的是两个串都出现过的回文串。那么我们完全可以这么做,在PAM的时候记录当前节点的回文串出现的次数,在一个串中这个次数只能出现一次,最后我们遍历PAM所有节点,去记录所有的出现次数为两次的节点,这个节点就是代表的一个回文串,然后PAM路上我们又已经知道了所有节点的LEN,那么就只需要记录最长的LEN就是答案。然后我们遍历所有PAM上节点的时候就可以算出每种长度的串的数量。其实就是PAM原创 2020-05-25 20:13:07 · 187 阅读 · 0 评论