首页 > 代码库 > kmp模版
kmp模版
1 int kmpnext[N]; 2 char s[N],t[N];///s为主串,t为模式串 3 int slen,tlen;///slen为主串的长度,tlen为模式串的长度 4 void getnext() 5 { 6 int i,j; 7 j=next[0]=-1; 8 i=0; 9 while(i<tlen)10 {11 if(j==-1||x[i]==x[j])12 {13 kmpnext[++i]=++j;14 }15 else16 {17 j=kmpnext[j];18 }19 }20 }21 /*22 返回模式串T在主串S中首次出现的位置23 返回的位置是从0开始的。24 */25 int kmp_index()26 {27 int i=0,j=0;28 getnext();29 while(i<slen&&j<tlen)30 {31 if(j==-1||s[i]==t[j])32 {33 i++;34 j++;35 }36 else37 j=kmpnext[j];38 }39 if(j==tlen)40 return i-tlen;41 else42 return -1;43 }44 /*45 返回模式串在主串S中出现的次数46 */47 int kmp_count()48 {49 int ans=0;50 int i,j=0;51 if(slen==1&&tlen==1)52 {53 if(s[0]==t[0])54 return 1;55 else56 return 0;57 }58 getnext();59 for(i=0;i<slen;i++)60 {61 while(j>0&&s[i]!=t[j])62 j=kmpnext[j];63 if(s[i]==t[j])64 j++;65 if(j==tlen)66 {67 ans++;68 j=kmpnext[j];69 }70 }71 return ans;72 }
kmp模版
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。