数据结构--KMP
文章平均质量分 59
focus_best
这个作者很懒,什么都没留下…
展开
-
UVA 1328 Period(KMP:最短循环节)
UVA 1328 Period(KMP:最短循环节) 题意:对于一个字符串,求它的所有前缀的最短循环节.比如对于前i(i>=2)个字符构成的子串,该串是由某个更小的子串重复k(k>=2)次形成的.由于要求最短循环节,所以对于同一前缀来说,k尽量大. 分析:详解见刘汝佳:训练指南P213 如果前i(i>=2)个字符(即0到i-1字符)是一个周期串,那么错位部分就是一个最短循环节,i%(i-f[原创 2014-04-04 10:54:28 · 1684 阅读 · 0 评论 -
POJ 2406 Power Strings(KMP:找串循环节)
POJ 2406 Power Strings(KMP:找串循环节) http://poj.org/problem?id=2406 题意:找一个串的最小循环节的个数. 分析:类似于UVA1328: http://blog.csdn.net/u013480600/article/details/22919801 K= n/(n-f[n]) 即为所求的循环节个数. AC代码: #inclu原创 2014-04-04 16:32:32 · 1337 阅读 · 0 评论 -
HDU 3336 Count the string(KMP:串前缀匹配自身+DP)
HDU 3336 Count the string(KMP:串前缀匹配自身) http://acm.hdu.edu.cn/showproblem.php?pid=3336 题意:给你一个串,求用该串所有前缀去 匹配本身这个串的次数 的总和. 分析: 首先想一想,每个前缀是不是都要去和串的以某个节点结尾的后缀去匹配. 令dp[i]表示S[0,i-1]串的后缀能匹配的前缀个数,原创 2014-04-04 17:18:47 · 1228 阅读 · 0 评论 -
POJ 3461 Oulipo(KMP:统计一个串出现的次数)
POJ 3461 Oulipo(KMP:计算一个串出现的次数) http://poj.org/problem?id=3461 题意:就是给你一个T串和P串,问你P串在T串中出现了多少次. 分析:直接套用KMP模板即可. AC代码: #include #include #include #include #include using namespace std; char T[10000原创 2014-04-04 12:26:13 · 1219 阅读 · 0 评论 -
KMP算法
KMP算法 KMP算法求出ex[i]数组,ex[i]数组表示主串S中以第i个字符(也即S[i-1]位置)为尾字符的后缀与模式串T的前缀的最长公共部分。 KMP模板中,字符都是从下标0开始存放的,直到m-1位置。假设有两个串S和T,其中T为模板串,S为主串。KMP其实本质是用来看S中每个i位置的后缀最多能与T的多长的前缀匹配的算法。即前缀匹配后缀的算法。进行模式串原创 2015-03-26 10:33:36 · 2267 阅读 · 9 评论 -
HDU 1867 A + B for you again(KMP:后缀与前缀)
HDU 1867 A + B for you again(KMP:后缀与前缀) http://acm.hdu.edu.cn/showproblem.php?pid=1867 题意:给你两个字符串,输出他们合并之后的字符串,合并的时候把A的后缀和B的前缀重叠合并即可.要求首先使得合并后的字符串尽量短,其次是使得合并后的字符串字典序尽量小. 分析: 此题可以暴力直接判断A与B相同原创 2014-04-07 01:49:45 · 1742 阅读 · 0 评论 -
HDU 2203 亲和串(KMP:循环移位)
HDU 2203 亲和串(KMP:循环移位) http://acm.hdu.edu.cn/showproblem.php?pid=2203 题意:判断两个串T和P是不是亲和串,即P串是不是能和T串循环移动K位后的字符串有匹配点. 分析:本题的关键在于循环移位,暴力+KMP需要O(n^2)的时间.不过将T串复制一份直接相连,就可以变成TT串,只需要保证strlen(T)>=strlen(P)的原创 2014-04-06 22:53:22 · 1206 阅读 · 0 评论 -
HDU 2087 剪花布条(KMP:贪心)
HDU 2087 剪花布条(KMP:简单应用) http://acm.hdu.edu.cn/showproblem.php?pid=2087 题意:给你两个串S和T,问你S中包含了多少个T串,其中包含的T串不能重叠. 分析: 直接用KMP算法,用T模式串去匹配S主串即可,但是当匹配成功的时候要看看当前匹配点离上一个匹配点是不是距离差>=T的长度. AC代码: #inclu原创 2014-04-06 22:34:02 · 2357 阅读 · 0 评论 -
POJ 3450 Corporate Identity(KMP:最长连续公共子序列)
POJ 3450 Corporate Identity(KMP:最长连续公共子序列) http://poj.org/problem?id=3450 题意:给你N个字符串,要你找出最长公共连续子串,如果存在多个,输出字典序最小的那个. 分析: 本题基本类似于POJ3080,详见: http://blog.csdn.net/u013480600/article/details/原创 2014-04-06 15:16:13 · 1215 阅读 · 1 评论 -
POJ 2752 Seek the Name, Seekthe Fame(KMP:后缀与前缀)
POJ 2752 Seek the Name, Seekthe Fame(KMP:后缀与前缀) http://poj.org/problem?id=2752 题意:给你一个串T,找出串T的子串,该串既是T的前缀也是T的后缀. 分析: 首先要知道KMP的next[i]数组求得的数值就是串T中的[1,i-1]的后缀与串T中的[0,i-2]前缀的最大匹配长度.本题肯定要输出串T的长原创 2014-04-06 12:32:28 · 1273 阅读 · 0 评论 -
POJ 3080 Blue Jeans(KMP:最长连续公共子序列)
POJ 3080 Blue Jeans(KMP) http://poj.org/problem?id=3080 题意:给你n个字符串,要你求出这n个字符串的最长公共连续子序列是哪个,如果存在多个最长的,就输出字典序最小的那个. 分析: 本题只需要枚举第一个串的长度>=3的所有字串,然后用该字串KMP匹配其他剩下n-1个串,看看能否找到匹配点即可. 本题枚举字串原创 2014-04-06 13:31:22 · 1997 阅读 · 1 评论 -
HDU 3746 Cyclic Nacklace(KMP:补齐循环节)
HDU 3746 Cyclic Nacklace(KMP:循环节) http://acm.hdu.edu.cn/showproblem.php?pid=3746 题意:给你一个串,要你在串头或尾添加最少的字符,使得该串至少有2个循环节,问你最少需要加几个字符. 分析: 首先要明白:如果一个串需要至少添加x(x>=0)个字符才能是有2个循环节的串,那么我可以只在串末尾添加,不需原创 2014-04-04 18:53:43 · 3958 阅读 · 0 评论 -
HDU 2594 Simpsons’ HiddenTalents(KMP:后缀与前缀)
HDU 2594 Simpsons’ HiddenTalents(KMP:后缀与前缀) http://acm.hdu.edu.cn/showproblem.php?pid=2594 题意:给定两个串S1和S2,你要找到S1的最长前缀,且这个前缀还要是S2的后缀. 分析:本题只需要利用KMP计算串S2的后缀能匹配S1的前缀是多长即可.这就是KMP计算ex数组的功能. AC代码: #incl原创 2014-04-05 15:48:39 · 1055 阅读 · 0 评论 -
POJ 2185 Milking Grid(KMP:循环节加强版)
POJ 2185 Milking Grid(KMP) http://poj.org/problem?id=2185 题意:给你一个R*C的字符矩阵,要你求最小的子矩阵,我们能通过不断重复该子矩阵从而得到一个大矩阵把原矩阵包含在内,求这个子矩阵的面积? 分析: 做这题之前首先要知道一个字符串(可能内带数个循环节但是不完整)的最短循环节长度= len - next[len]. 详原创 2014-04-05 17:24:37 · 1457 阅读 · 0 评论 -
HDU 3068 最长回文(manacher算法:回文字串)
HDU 3068 最长回文(扩展KMP:回文) http://acm.hdu.edu.cn/showproblem.php?pid=3068 题意:给你一个串,求这个串中的最长回文字串的长度. 分析: 利用扩展KMP算法可以很轻松的求出原始串的后缀回文字串长. 详解请见HDU3613解题报告: http://blog.csdn.net/u013480600/article原创 2014-04-07 01:07:02 · 1692 阅读 · 0 评论 -
HDU 1711 Number Sequence(KMP:找模板第一次出现的位置)
HDU 1711 Number Sequence(KMP:找模板第一次出现的位置) http://acm.hdu.edu.cn/showproblem.php?pid=1711 题意:给你T串和模板P串,输出P第一次出现的位置. 分析:简单KMP,直接用模板,详见刘汝佳:训练指南. AC代码: #include #include #include #include #include us原创 2014-04-04 13:31:25 · 1333 阅读 · 0 评论