随笔分类 -  [字符串] KMP

摘要:题目 Description 题解 比较关键的一点:如果a包含b,b包含c,则a包含c。 所以可以定义solve(p)为返回第p个字符串之前不能被p包含的字符串的最大位置,在递归过程中找到取最大答案。 细节详见代码。这样递归处理复杂度为O(n)。 #include <bits/stdc++.h> # 阅读全文
posted @ 2020-08-14 15:25 limil 阅读(133) 评论(0) 推荐(0)
摘要:题目 求出一个num数组一一对于字符串S的前i个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠,将这种字符串的数量记作num[i]。 输出$\prod_^L(num[i]+1)$对1,000,000,007取模的结果即可。 题解 先求出next数组。然后预处理一个tmp数组, 阅读全文
posted @ 2020-08-14 15:15 limil 阅读(109) 评论(0) 推荐(0)
摘要:题目 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字。 他的不吉利数字A1A2... Am(0<=Ai<=9)有M位,不出现是指X1X2...Xn中没有恰好一段等于A1A2...Am。(A1和X1可以为0) 题解 看到题目,很自 阅读全文
posted @ 2020-08-14 15:02 limil 阅读(86) 评论(0) 推荐(0)
摘要:题目 Tz养了一群仓鼠,他们都有英文小写的名字,现在Tz想用一个字母序列来表示他们的名字,只要他们的名字是字母序列中的一个子串就算,出现多次可以重复计算。现在Tz想好了要出现多少个名字,请你求出最短的字母序列的长度是多少。 (注:所有名字都不互相包含) 题解 两两单词连边,边权为两个单词重叠连接后增 阅读全文
posted @ 2020-08-14 14:33 limil 阅读(122) 评论(0) 推荐(0)
摘要:介绍 Knuth-Morris-Pratt字符串查找算法(简称为KMP算法) 用于字符串的模式匹配。相比朴素算法,它的时间复杂度为O(n + m),其中n是文本串长度,m是模式串长度。 原理 kmp通过计算模式串的next数组作为辅助来减少朴素算法中重复的比对。 next数组代表模式串的最长相同真前 阅读全文
posted @ 2020-04-13 23:43 limil 阅读(180) 评论(0) 推荐(0)