
——KMP
FeBr2
(๑•̀ㅂ•́)و✧
展开
-
Kmp找字符串循环节——Period ( POJ 1961 )
题目链接: http://poj.org/problem?id=1961分析: 给出一个字符串长度为N,从左变开始取2~N个字符出来构成一个新字符串,若新字符串能被一个最短的循环节构成则输出新字符串的长度和循环节循环次数。题解: 直接用Kmp里的SetNext()函数,求出该字符串里每一个字符的重复位置,用2~N长度减去以该长度为下标对应Next数组里的值即重复位置得到该两个重复出现字符间原创 2016-07-15 15:09:46 · 4078 阅读 · 0 评论 -
KMP(内含next数组讲解) —— 剪花布条 ( HDU 2087 )
关于KMP算法前缀next最同俗易懂的解释请看: http://blog.youkuaiyun.com/yearn520/article/details/6729426next数组代码:void SetPrefix(const char *Pattern, int prefix[]){ int len=CharLen(Pattern);//模式字符串长度。 prefix[0]=0;原创 2016-07-14 18:13:07 · 425 阅读 · 0 评论 -
DP+KMP——Another Meaning ( HDU 5763 ) ( 2016 Multi-University Training Contest 4 1001 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5763分析: 每次给出两个字符串A和B,B可以被替换成*,在A中查找B,每一个B都可以进行替换,求一共能把A替换成多少种字符串。题解: 因为A字符串的长度为100000,所以答案最多会有2的100000这么多种,直接KMP会Bomb,ShaKaLaKa,因此需要用DP来做:DP[i]表示到第i原创 2016-07-28 21:02:23 · 386 阅读 · 0 评论 -
Kmp(求字符串公共循环节数目)——Common Divisors ( CodeForces 182D )
题目链接: http://codeforces.com/contest/182/problem/D分析: 题意为给出两个字符串,求其公共循环节的数目,那么首先要求出其公共最小循环节!这里需要用到Kmp算法中的SetNext()函数来求循环节。关键步骤:SetNext()函数:(将第一个重复位之前的所有位的值赋为-1,然后第一个重复位从0开始,之后匹配失败也赋值为0)void SetNext原创 2016-07-16 16:48:49 · 873 阅读 · 0 评论 -
字符串匹配(strstr)—— Bazinga ( HDU 5510 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5521分析: 给出n个字符串,按顺序标上label:1-n,求label最大的字符串并且满足在它之前至少存在一个字符串不不是它的子串题解: Get一个新的函数:strstr(char * str1, char * str2)返回值:若str2是str1的子串,则返回str2在str1的首次出原创 2016-10-01 15:02:15 · 509 阅读 · 0 评论