数据结构——kmp算法
倚剑笑紅尘
教练,我想学kaldi!
展开
-
POJ 3461 Oulipo(KMP统计子串出现次数)
题目链接:poj3461题目大意:典型的KMP 统计模式串在主串中出现的次数#include#include#include#include#includeusing namespace std;#define maxn 1000010#define mem(a,val) memset(a,val,sizeof (a) )char w[maxn],t[maxn原创 2017-07-26 21:58:57 · 314 阅读 · 0 评论 -
扩展KMP总结(模板题hdu2594)
参考介绍:点击打开链接 点击打开链接模板题:hdu2594 (扩展KMP)http://acm.hdu.edu.cn/showproblem.php?pid=2594题目大意:给定两个字符串,在第一个字符串中找到一个最大前缀作为第二个字符串的后缀思路:将S1作为模式串 然后在s2中寻找,求出s1的next数组,nxt[i]:x[i...m-1]与x[0..原创 2017-08-31 19:34:55 · 945 阅读 · 0 评论 -
poj2185 Milking Grid(两次KMP)
题目链接:http://poj.org/problem?id=2185题目大意:在字符矩阵中找出一个最小子矩阵,使其多次复制所得的矩阵包含原矩阵。思路:做两次KMP,分别为一次行一次列。 行和列分别是len-next[len]; 最后两个结果相乘就可以了#include#include#include#includeusing namespace std原创 2017-08-30 22:04:06 · 194 阅读 · 0 评论 -
KMP算法
假设主串:S: S[1] S[2] S[3] ……S[n]模式串:T: T[1] T[2] T[3]…..T[m]现在我们假设主串第i 个字符与模式串的第j(j主串: S[1]...S[i-j+1]...S[i-1]S[i]... ||(匹配) || ≠模式串: T[1]... T[j-1] T[j]转载 2017-08-30 20:34:51 · 155 阅读 · 0 评论 -
HDU 3336 Count the string(KMP+DP)
题目链接:题目大意:求字串中【前缀+跟前缀相同的子串】的个数?Sample Input14ababSample Output6abab:包括2个a,2个ab,1个aba,1个abab思路: KMP + DPkmp思想: 对字符串进行预处理,记录与当前位置i后缀相同的“最近”位置,用next[i]记录,保证 s[1 .. i]原创 2017-07-27 17:20:22 · 189 阅读 · 0 评论 -
HDU 2594 Simpsons’ Hidden Talents(简单KMP)
题目链接:题目大意:求最长的相同前缀和后缀(取第一个字符串的前缀和第二个字符串的后缀)思路:因为s字符串的前缀匹配t字符串的后缀 所以把s作为匹配的字符串 求nexts然后在kmp函数中,记录t字符串中第i个字符最多能匹配到s字符串的第几个#include #include #include #include using namespace std;#define m原创 2017-07-27 17:18:59 · 184 阅读 · 0 评论 -
POJ-2752 Seek the Name, Seek the Fame
题目链接:poj2752参考博客:点击打开链接题目大意:给你一个字符串S。假如为ababcababababcabab.找出这个字符串中所有的前缀等于后缀的子串。输出它们的长度。第一个为a,最后一个为b,所以1不行。前两个为ab,最后二个也为ab,所以2行。前三个为aba,后三个为bab,所以3不行。以此类推。。找出全部当然,全部字符串也是可以的。因为abab原创 2017-07-27 11:50:17 · 193 阅读 · 0 评论 -
HDU-3746 Cyclic Nacklace (对next的深入思考)
题目链接:hdu3746题目大意:给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。例子:abcabc 已经循环2次,添加数为0abcac 没有循环2次,添加字符abcac。数目为5.abcabcab 已经循环过2次,但第三次不完整,需要添加数为1解题思路:next[]数组的运用。这里需要深刻理解next数组的含义,所以需要花费转载 2017-07-27 11:30:05 · 178 阅读 · 0 评论 -
poj 1961 Period(kmp)
题目链接:poj1961题目大意:给你一个字符串,求这个字符串到第i个字符为止的循环节的次数。比如aabaabaabaab,长度为12.到第二个a时,a出现2次,输出2.到第二个b时,aab出现了2次,输出2.到第三个b时,aab出现3次,输出3.到第四个b时,aab出现4次,输出4.解题思路:这道题好像就是POJ 2406的加强版而已。那道题是输出一个字符串的循环节出原创 2017-07-27 11:06:23 · 186 阅读 · 0 评论 -
POJ 2406 Power Strings(KMP求一个串的重复子串)
题目链接:poj2406题意:给一个字符串S长度不超过10^6,求最大的n使得S由n个相同的字符串a连接而成,如:"ababab"则由n=3个"ab"连接而成,"aaaa"由n=4个"a"连接而成,"abcd"则由n=1个"abcd"连接而成。定理:假设S的长度为len,则S存在循环子串,当且仅当,len可以被len - next[len]整除,最短循环子串为S[len - next[原创 2017-07-27 10:12:00 · 560 阅读 · 0 评论 -
HDU 1711 Number Sequence (KMP找子串第一次出现的位置)(基础模板题)
题目链接:hdu1711题意:给出若干个样例,每个样例包括两个字符串,如果第二个字符串是第一个字符串的子串,则求他第一次出现的位置,不是子串的话输出-1.思路:kmp算法的模板题对nexts数组如何构造解释:根据定义nexts[0]=-1,假设nexts[j]=k, 即P[0...k-1]==P[j-k,j-1]1)若P[j]==P[k],则有P[0..k]==P[j-k+原创 2017-07-26 22:32:21 · 650 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第三场)# E-Sort String (next数组的应用)
题目链接:https://www.nowcoder.com/acm/contest/141/E题目大意:给一个字符串S,定义一种操作为:从字符串首位置(0)开始将S0~Si的字符移到末尾得到一个新的字符串,直到每一个位置都遍历完成,如:abab—> (0开始)abab —>(0~1位置) baba —>(0~2位置) abab —>(0~3位置)baba所有...原创 2018-08-08 20:38:46 · 140 阅读 · 0 评论