随笔分类 - 字符串--KMP
摘要:链接next数组的巧妙应用 学弟出给学弟的学弟的题。。求最长的 是前缀也是后缀同时也是中缀的串 next的数组求的就是最长的前后缀 但是却不能求得中缀所以这里 就把尾部去掉之后再求 这样就可以保证是中缀了 先把所有既是前缀也是后缀的长度的求出来标记 然后再去掉尾部 求一下最大 既是前缀又是后缀的长度 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 #define INF 0xfffffff11 #define N 1.
阅读全文
摘要:http://poj.org/problem?id=1961对于next数组只能说略懂,其中精髓还是未完全领会大体是本串相同前缀与后缀的最大长度,读不懂?看串abcdab 这里所说前缀与后缀都为ab这题核心就一句话if((i+1)%(i-next[i])==0) 输出 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 #define INF 0xfffffff11 #define N 100001012 char s[.
阅读全文
摘要:View Code 1 #include 2 #include 3 char c1[1000011],c2[1000011]; 4 int next[1000011]; 5 int kmp() 6 { 7 int k = strlen(c1),i,j,y = -1; 8 memset(next,0,sizeof(next)); 9 next[0] = -1;10 for(i = 1; i -1&&c1[i]!=c1[y+1])13 y = next[y];14 if(c1[y+1]==c1[i])15 ...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1867这题输出有点麻烦 两个KMP 找出从一个字符串开头到令一个字符串结尾匹配的最大长度 再根据字符串比较函数字典序输出View Code 1 #include 2 #include 3 char c1[100001],c2[200001],c3[100001],c4[200001]; 4 int next[100001]; 5 int kmp(char *a,char *b) 6 { 7 int k1 = strlen(a),k2 = strlen(b),i,j,y; 8 y = -1; ...
阅读全文