标签:方法 条件 span mp算法 .net char 扩展kmp 位置 clu
这仅仅是依据已经匹配过得数据得出的结论。后没有匹配过得地方谁也说不定。或许没匹配过得地方也同样呢。
即推断通过模式串自相似性求出的最长公共子串是否超过已经比較过的最大位置。
即推断通过模式串自相似性求出的最长公共子串是否超过已经比較过的最大位置。
<span style="font-size:18px;">#include<stdio.h> #include<string.h> using namespace std; int extend[100001],next[100001]; void exkmp(char *s,char *t) { int slen,tlen,a=0,i,l,p,j; slen=strlen(s); tlen=strlen(t); next[0]=tlen;//求next数组 while(a<tlen-1 && t[a]==t[a+1])a++; next[1]=a; a=1; for(i=2;i<tlen;i++) { p=a+next[a]-1; l=next[i-a]; if(i+l-1>=p) { j=(p-i+1)>0?p-i+1:0; while(i+j<tlen && t[i+j]==t[j])j++; next[i]=j; a=i; } else next[i]=l; }//求extend数组 a=0; while(a<tlen && a<slen && t[a]==s[a])a++; extend[0]=a; a=0; for(i=1;i<slen;i++) { p=a+extend[a]-1; l=next[i-a]; if(i+l-1>=p) { j=(p-i+1)>0?p-i+1:0; while(i+j<slen && j<tlen && s[i+j]==t[j])j++; extend[i]=j; a=i; } else extend[i]=l; } } int main() { //详细情况详细分析。return 0; }</span>
标签:方法 条件 span mp算法 .net char 扩展kmp 位置 clu
原文地址:http://www.cnblogs.com/clnchanpin/p/7396926.html