KMP基础
来源:互联网 发布:java listfiles 排序 编辑:程序博客网 时间:2024/06/06 14:05
POJ 2752-Seek the Name, Seek the Fame
题意:给出一个字符串str,求出str中存在多少子串,使得这些子串既是str的前缀,又是str的后缀。从小到大依次输出这些子串的长度。
思路:假设字符串str,其长度是len,求出len处的next值,并递归的向下求出所有的next值。
POJ 3461-Oulipo
题意:给两个字符串p和s,求出p在s中出现的次数。主串和子串匹配问题。
POJ 2185-Milking Grid
题意:给定一个由字符组成的矩阵,求出它的面积最小的覆盖矩阵。
思路:类似于最小覆盖子串,扩展到二维。最小覆盖子串必定是原串的前缀,对于矩阵,可以求出每一行的最小覆盖子串的长度,只要对这些长度求最小公倍数,就可以获得最小覆盖矩阵的宽度。列的话同理
这里有一个地方要注意,如果求最小公倍数的过程中发现“行最小公倍数>=原矩阵宽度“时,可以确定最小覆盖矩阵的宽度与原矩阵一样。列也是一样的道理。因为原矩阵必定是它自己的覆盖矩阵。
POJ 3080-Blue Jeans
题意:求n个字符串的最长公共串。
思路:枚举第一串的所有子串,然后与后面的所有串进行比较。
POJ 3450-Corporate Identity
题意:求多个字符串的最长公共子串
思路:找其中一个字符串,枚举它的所有的字串,逐个kmp比较。可二分优化。
HDU 3336-Count the string
题意:每个宝物最多有12个点需要侍卫守护,如果宝物地点为i,j,需要保护的点是x,y的话,那么(i+j)%2!=(x+y)%2,可以按照棋盘奇偶划分,然后求一个最小点覆盖。
HDU 3746-Cyclic Nacklace
题意:给定一个字符串,需要添加几个字符可以构成一个由n个循环节组成的字符串。
思路:kmp+字符串的最小循环节问题,可以先求出字符串的最小循环节的长度:假设字符串的长度为l,那么最小的循环节c = l-next[l] ;
如果有l%c== 0,那么这个字符串就是已经合法的字符串,不用添加任何字符; 否则需要添加的字符数就是c- (l-(l/c)*c)),相当于需要在最后一个循环节上面添加几个。 如果c = 1,说明字符串只有一种字符例如“aaa” ; 如果c= m说明最小的循环节长度为m,那么至少还需m个;
如果m%cir == 0,说明已经不用添加了。
HDU 1358-Period 、
题意:从字符串的第二个开始,看前面是循环串吗,是的话就输出此时的位置,和循环串的周期,周期必须大于1。
思路:字符编号从0开始,那么if(i%(i-next[i])==0),则i前面的串为一个轮回串,其中轮回子串出现i/(i-next[i])次。
HDU 2594-Simpsons’ Hidden Talents
题意:给定两个字符串s1,s2,求最长的s1前缀,使其为s2的最长后缀,输出该字符串和其长度。
POJ 2406-Power Strings
题意:给一个串,求该串最多是多少个相同的字串重复连接而成的。
思路:KMP中的get_next(),对next数组的应用。next[len]是最后一个字符跳的步长,如果有相同字符串,则该串长度是len-next[len].如果整个长度len能分解成x个这种串(能整除),就得到ans了。否则不能分解。只能是由自己组成串,长度为1。
- KMP-基础
- KMP基础
- KMP基础
- 基础练习KMP算法
- [POJ3461] Oulipo[KMP基础]
- 基础KMP两道
- 基础算法 KMP
- 基础算法 扩展KMP
- POJ3461 Oulipo KMP基础
- kmp 基础详解
- 【数据结构基础】KMP算法
- KMP算法(2)-KMP算法的基础
- 计蒜客 B kmp基础 kmp模板
- poj 1961 Period kmp基础
- poj 3461 Oulipo kmp基础
- HDU 1711 kmp基础题目
- 字符串处理基础算法-KMP
- HDOJ Oulipo (基础KMP)
- 七牛 for ThinkPHP 正确使用及全功能开放
- 装配Bean(四)
- 蓝桥杯 地宫取宝
- 上课编程练习1
- Linux中正则表达式的应用
- KMP基础
- PHP使用PHPMailer类发送邮件
- 大数据(二)
- 笔记
- 2016年9,10,11月份工作心得
- ajax data 参数与 dateType 参数 400(request error)
- github托管
- GreenDao3使用说明
- 三角函数