KMP
文章平均质量分 71
gemini_玥
这个作者很懒,什么都没留下…
展开
-
poj3461 kmp 模板题
KMP模板题 输入字符串A和字符串B,求字符串A在字符串B中出现的次数 #include #include #include using namespace std; const int maxn=1000011; int tot; void kmp(string a,string b) { int i,j; int p[maxn]; j=-1; me原创 2012-12-02 00:02:21 · 532 阅读 · 0 评论 -
poj2185 kmp经典好题!
题意:先对于一个n*m的字符矩阵S,求一个S中最小的矩阵t,使得这个矩阵可以通过复制,组成一个大矩阵T,T可以完全覆盖S。注意,这里S和T不必要相等,只要T中和S重合的那部分完全等于S即可。 思路:网上通行的题解方案其实是不可取的,能AC.....只能说数据比较弱。这道题很多题解说求每行最小重复子串长度的最小公倍数,每列最小重复子串长度的最小公倍数。其实这是很容易看出反例的。因为并不要求矩阵T和原创 2012-12-04 15:01:33 · 595 阅读 · 0 评论 -
kmp算法详解 by huangchao
http://chaoswork.com/blog/2011/06/14/kmp%E7%AE%97%E6%B3%95%E5%B0%8F%E7%BB%93/ 写得非常详细,和matrix67的一起看效果非常好 主要看了这里,感觉讲的十分的不错,总结一下。 首先声明要搜索的串为S,设长度为n,要匹配的串为M,设长度为m. 先考虑暴力的算法,暴力的算法是遍历S的每一个字符,然后从这个字转载 2012-12-02 12:04:09 · 778 阅读 · 1 评论 -
poj1226 kmp 最长公共子串
题目:对于字符串A1,A2,...,An ,求一个最大子串长度,使得它或者它的逆向串在每个串中出现 思路:对于A1串,寻找每一个子串,与之后n-1个串匹配。子串长度的选取可以优化。 #include #include #include using namespace std; const int maxn=101; bool kmp(string a,string b原创 2012-12-02 13:00:22 · 495 阅读 · 0 评论 -
kmp算法模板
#include #include #include using namespace std; const int maxn=10011; int tot; int ans[101]; void kmp(string a,string b) { int i,j; int fail[maxn]; //这里的fail就是常说的next j原创 2012-12-01 23:26:29 · 454 阅读 · 0 评论 -
kmp算法详解 by matrix67
如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串。你可以委婉地问你的MM:“假如你要向你转载 2012-12-01 23:17:38 · 553 阅读 · 0 评论 -
poj2406 kmp 最小重复子串
这个题就是利用kmp的next函数,求组成主串的最小重复子串的长度。 如果字符串下标从1开始的话,字符串长度len (1)若len mod ( len - next[len] ) = 0 那么a[next[len]+1...len] 就是最小重复的子串 (2)若len mod ( len - next[len] ) !=0 那么最小重复子串为字符串本身 #include #incl原创 2012-12-02 00:51:41 · 1477 阅读 · 0 评论 -
poj1961 kmp 重复串
题目:一个字符串,对它的所有前缀S1,判断S1是否是由若干S1的子串重复组合而成的,若是,则输出S1长度,重复次数 思路:同此题,http://blog.csdn.net/my_gemini_acm/article/details/8247729。注意这里子串重复数必须大于1。 #include #include using namespace std; const int m原创 2012-12-02 13:48:14 · 459 阅读 · 0 评论 -
string常用操作(更新)
string的倒置 (1) #include str.assign(str.rbegin(),str.rend()); (2) #include reverse(str.begin(),str.end()); string的子串 string substr(int pos = 0,int n ) const; //返回pos开始的n个字符组成的字符串原创 2012-12-02 13:13:36 · 337 阅读 · 0 评论 -
poj3450 Corporate Identity
题意:给你若干个字符串,求它们的最长公共子串。对于相同长度的最长公共子串,取字典序最小的那个。 思路:枚举第一个字符串的所有可能子串,对后面所有字符串进行匹配。 #include #include #include using namespace std; const int maxn=1001; bool kmp(string a,string b) { int i,原创 2012-12-09 23:38:41 · 345 阅读 · 0 评论