
KMP
Bahuia
软件工程博士
展开
-
HDU - 1686 KMP裸题
题意:求文本串中有多少个模式串。思路:kmp算法是ac自动机的基础,其实质就是建立一个自动机,让文本串在自动机上运行。其中最关键的就是next数组,对于这个一定要深刻理解。next[i]数组所表达的含义就是对于第i个字符来说,前i-1个字符中最大的前缀和后缀能匹配上的长度。举个例子:abcdabd,最后一个字符d的前缀是abcdab,可以发现这里面最长的能自由匹配的前缀和后原创 2017-02-14 08:48:11 · 652 阅读 · 0 评论 -
HDU - 2087 KMP
题意:从文本串种匹配模式串,要求找到最多有多少个互相不重叠的模式串。思路:这里要求匹配结果相互不重叠,只需要修改一下KMP算法,在每次匹配成功的时候,将j变为0即可。代码:#include #include #include #include using namespace std;const int MAXN = 1005;char s[MAXN], t[MAX原创 2017-02-14 09:14:59 · 276 阅读 · 0 评论 -
HDU - 5763 KMP + DP
题意:给出两个字符串s和t,其中t有两种意义,s中可能包含若干t,问s一共有多少种意义思路:KMP预处理出匹配位置,然后dp代码:#include using namespace std;typedef long long ll;const int MAXN = 111111;const ll MOD = 1000000007;int Next[MAXN];boo原创 2017-03-24 10:29:55 · 457 阅读 · 0 评论 -
HDU - 5510 KMP + 尺取法
题意:给出n个字符串s[1]到s[n],找到最大的编号i,使得s[i]之前的字符串中存在至少一个不是s[i]的子串。思路:好题。kmp是一定的。利用尺取法的思想,设置两个指针l和r,那么对于s[l]和s[r]就存在两种情况:1. s[l]是s[r]的子串,那么++l2. s[l]不是s[r]的子串,那么更新ans=r,然后++r之所以不考虑l之前的字符串,是因为按照原创 2017-03-15 18:23:00 · 459 阅读 · 0 评论 -
HDU 6153 拓展kmp
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6153 Ni表示S串中出现了多少次T[i,len],Li表示T[i,len]的长度,求Li和Ni的乘积和。思路:把S和T都倒过来拓展KMP即可。代码:#include <bits/stdc++.h>using namespace std;typedef long long LL;const原创 2017-08-30 14:47:10 · 355 阅读 · 0 评论