随笔分类 -  字符串--kmp&&扩展kmp

摘要:题目链接:https://vjudge.net/problem/POJ-2185 题意:给定由大写字母组成的r×c矩阵,求最小子矩阵使得该子矩阵能组成这个大矩阵,但并不要求小矩阵刚好组成大矩阵,即边界部分可以空缺(见样例)。 思路: 把每一行视作一个字符,然后对r行求next数组,那么r-nex[r 阅读全文
posted @ 2019-11-05 12:45 Frank__Chen 阅读(233) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-2594 题意:给定两个字符串s1、s2,求s1的前缀和s2的后缀的最长公共部分。 思路: 将s1和s2连接后求nex数组即可,当公共部分超过s1、s2长度的最小值时,输出最小值。 AC代码: #include<cstdio> 阅读全文
posted @ 2019-11-05 11:43 Frank__Chen 阅读(157) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-3746 题意:给定一个字符串,问最少在两端添加多少元素使得整个字符串是呈周期性的。 思路: 应用到kmp中nex数组的性质,数组的最小循环节是L=len-nex[len],证明见http://www.cnblogs.com/w 阅读全文
posted @ 2019-11-03 17:35 Frank__Chen 阅读(142) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-3336 题意:给定长为n(<=2e5)的字符串s,求s的每个前缀在s中出现的次数之和。 思路: 用dp[i]表示以s[i]为结尾的子串是s的某一种前缀的方案数,那么dp[i]=dp[nex[i]]+1,因为[nex[i]-(i 阅读全文
posted @ 2019-11-03 16:14 Frank__Chen 阅读(140) 评论(0) 推荐(0)
摘要:题目链接:https://www.luogu.org/problem/P5410 题意:有两个字符串a,b,要求输出b与a的每一个后缀的最长公共前缀。输出: 第一行有lenb个数,为b的next数组(特别地,next1为lenb) 第二行有lena个数,即答案。 思路:扩展kmp模板,涉及字典树,后 阅读全文
posted @ 2019-11-03 11:32 Frank__Chen 阅读(210) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/POJ-2406 题意:求出给定字符串的周期,和poj1961类似。 思路:直接利用next数组的定义即可,当没有周期时,周期即为1。 AC代码: #include<cstdio> #include<cstring> #include< 阅读全文
posted @ 2019-11-03 11:18 Frank__Chen 阅读(308) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/POJ-1961 题意:给定一个长为n的字符串(n<=1e6),对于下标i(2<=i<=n),如果子串s(1...i)是周期子串,输出其最大周期。 思路: 考察对kmp算法中next数组的定义掌握,如果(i+1)%(i-j)==0 && 阅读全文
posted @ 2019-11-03 10:58 Frank__Chen 阅读(175) 评论(0) 推荐(0)
摘要:题目链接:https://www.cnblogs.com/kuangbin/archive/2012/08/14/2638803.html 题意:给定两个数组a、b,在数组a中查找b,求第一次出现的下标,若没有则输出-1。 思路:kmp算法的应用. AC代码: #include<cstdio> #i 阅读全文
posted @ 2019-11-02 16:10 Frank__Chen 阅读(192) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/POJ-3461 题意:给出主串和模式串,求出模式串在主串中出现的次数。 思路:kmp板子题。复杂度O(n+m)。 AC代码: #include<cstdio> #include<algorithm> #include<cstring> 阅读全文
posted @ 2019-11-02 15:43 Frank__Chen 阅读(437) 评论(0) 推荐(0)