![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
KMP
文章平均质量分 73
谢符宝
业精于勤,荒于嬉行成于思,毁于随。
展开
-
hdu4763(KMP的应用)
题意:给一个字符串,问最长的一个子串A,他是前缀,同时是后缀,并且中间也出现过A。并且出现的三个A都不没有重叠部分。 解法:先KMP求出失配数组,然后将所有的是后缀且是前缀的打上标记,然后遍历整个next数组,(对于每个位置的next来说,一直next向前取就是找到此前缀的一个个是整个字符串前缀的后缀,比较绕)暴力枚举判断每个串的所有匹配前缀的后缀是否合法。 代码:/*****原创 2014-05-01 22:04:27 · 1301 阅读 · 0 评论 -
poj3080(Blue Jeans)kmp求多个串公共子串
题意:给出1-10个长度为60的字符串,求出最长的公共子串(长度不能小于3),如果有多个一样长的,输出字典序最短的。 解法:想到kmp时,自己第一反应枚举第一个串的所有子串,在其他所有串中走一遍kmp,复杂度为10*60*60*60,但是发现只需枚举第一个串后缀就可以,每次枚举记录在所有串能走最远中走的最短的那个长度。这样复杂度就成了10*60*60,0ms AC。 代码:/*****原创 2014-05-06 14:19:11 · 920 阅读 · 0 评论 -
poj(2406)求最短重复子串-KMP
题意:求一个字符串的最短的重复子串; 解法:KMP求出Next数组,如果len-Next[len]是len的约数的话, 那么s[len-Next[len]]-s[len-1]就是了,否则重复子串就是母串本身。这个由Next的性质很好推得。 代码:/****************************************************原创 2014-04-22 21:33:45 · 2293 阅读 · 0 评论 -
poj2185(二维最小覆盖子串问题-KMP)
题意:给出一个二维的字符矩阵,问最小的可覆盖子矩阵大小。 解法:如果是一维的话,在KMP算法的Next数组中,len-Next[len]是一维的覆盖子串,如果len-Next[len]能整除len,则可恰好覆盖(即长度为len-Next[len]的前缀)。 在二维的情况,每行每列求一个最小公倍数就可以了,并且公倍数不能大于本身总长度。 代码:/*****原创 2014-04-23 00:27:19 · 1128 阅读 · 1 评论 -
poj(1226)KMP
题意:给n个字符串,求最长的一个字符串s使得给出的n个字符串中都会出现s或者s的反转。 解法:KMP裸题,枚举第一个串的所有子串对其他所有串进行KMP。 代码:/**************************************************** * author:xiefubao ******************************************原创 2014-04-22 17:52:04 · 721 阅读 · 0 评论 -
hdu3336(Count the string)KMP的应用
题意:给一个字符串,计算所有前缀在字符串中出现的次数和。 解法:KMP计算出Next数组后,每个位置的Next数组不断往前递归,每次相应前缀次数就加1. 代码:/****************************************************** * author:xiefubao ************************************原创 2014-05-08 23:30:18 · 639 阅读 · 0 评论 -
hdu3689(kmp+dp)
题意:问随机生成一个长度为m(m 解法:dp+kmp优化。ans[i][j]表示i长度,走到了s的j位置的概率,当然这是在i之前没有出现s的前提下(在状态转移时候已经保证了这一点);然后最后的概率就是1-m长度的串分别最后出现s的概率之和。 代码:/****************************************************** * @author:xief原创 2014-11-02 17:37:28 · 1594 阅读 · 0 评论