
字符串—KMP
文章平均质量分 72
Ezereal
这个作者很懒,什么都没留下…
展开
-
HDU4763 - Theme Section(KMP)
题目:描述给定一个字符串S,要求你找到一个最长的子串,它既是S的前缀,也是S的后缀,并且在S的内部也出现过(非端点)题解:KMP的失配函数fail[i]的值就是s[0..i]的最长前缀且是后缀的长度~~~,因此我们从S的末尾位置开始沿着失配函数跑即可,对于当前fail[i],判断前缀s[0…i]是否在s[i+1..length(s)-i]是否出现即可~~~~如果存在则是最长子串的长度,否则继续转载 2016-09-01 09:58:49 · 333 阅读 · 0 评论 -
poj 1699 TSP(状态压缩DP + KMP)
题意:给你n个串,让你构造出一个最短的串,使得这n个串每个串都是这个串的子串,输出你构造的串的长度即可(如果要输出构造的串中字典序最小的,就有点难了)数据范围小,不一定要使用KMP预处理的分两步:1:预处理出一个串的前缀最多匹配多少长度的另一个串的后缀2:然后就相当于旅行商问题了,每两个串之间都有一定的距离,设dp[i][j]表示i状态的字符串,最后一个字符串为j时所构造的转载 2016-08-09 10:21:38 · 509 阅读 · 0 评论 -
POJ 2752 Seek the Name, Seek the Fame(next数组的应用)
题意:找出所给串的所有前缀长度,使得所给串中这个长度的前缀==这个长度的后缀 Sample Input ababcababababcabab aaaaa Sample Output 2 4 9 18 1 2 3 4 5 看了HDU 1686 Oulipohttp://972169909-qq-com.iteye.com/blog/1070507 相信ne原创 2016-03-28 20:09:01 · 524 阅读 · 0 评论 -
HDU 3746 Cyclic Nacklace (next数组的应用)
题目大意:给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。例子:abcabc 已经循环2次,添加数为0abcac 没有循环2次,添加字符abcac。数目为5.abcabcab 已经循环过2次,但第三次不完整,需要添加数为1解题思路:next[]数组的运用。#include #include #inc原创 2016-03-28 16:39:13 · 374 阅读 · 0 评论 -
HDU 1686Oulipo
HDU的题意就是,给你一个字符串A,一个字符串B,求A在B中总共出现了几次,注意,重复的也算。KMP算法,过程中记录次数。#include #include using namespace std;#define L(i) i<<1#define R(i) i<<1|1#define INF 0x3f3f3f3f#define pi acos(-1.0)#de原创 2016-03-28 16:03:01 · 503 阅读 · 0 评论 -
hdu 3336 Count the string(★)
题意:给一个字符串,输出包括从1到len长 字符串前缀的总个数题解:设dp【i】:以string[i]结尾的子串总共含前缀的数量所以dp[j]=dp[i]+1,即以i结尾的子串中含前缀的数量加上前j个字符这一前缀#include #include #include #include #include #include using namespace st原创 2015-10-02 16:28:27 · 409 阅读 · 0 评论 -
HDU 2594 Simpsons’ Hidden Talents(KMP)
题意:给定两个字符串s1,s2,求最长的s1前缀ss使得ss为s2的最长后缀,输出该字符串和其长度。做法1:将两个字符串首位相接,直接利用next数组性质得出答案#include #include #include #include #include #include #include #include #include #include #include #incl原创 2016-03-30 19:28:55 · 509 阅读 · 0 评论 -
poj3080 Blue Jeans (多个字符串匹配)
题意:求n个字符串的最长公共串。思路很简单:枚举第一个字符串的不同长度子串,判断她是否为下面多有的公共子串?如果是的话,那么我们就表明找到,则比较其长度,如果比已经找到的串长,那么就替换结果串 否则按字典序比较。取字典序考前的,就可以。#include #include #include #include #include #include #include原创 2016-03-30 18:25:01 · 486 阅读 · 0 评论 -
hdu 2203 亲和串
题意:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。题解:把第一个字符串扩展为2倍,然后kmp#include #include #include #include #include #include using namespace std;const int maxn = 100005;char s[2*maxn]原创 2015-10-02 14:04:57 · 427 阅读 · 0 评论 -
Codeforces Round #344 (Div. 2) D. Messenger(kmp,细节)
题意:给出两个字符串所给的形式为 每个字符串的每段的字符和它的长度 求子串在主串中出现的次数解题思路:去掉子串的头和尾后kmp计算中间部分在主串中出现的次数最后判断即可在next跳转的时候要注意最后一位和模式串跳转位num相同(如果是模式串跳转位是1则不需要考虑)#include #include #include #include #include #include原创 2016-09-07 15:22:37 · 322 阅读 · 0 评论