首页 > 代码库 > KMP模板
KMP模板
#include<bits/stdc++.h>using namespace std;/*************************KMP模板****************************/int f[101];//优化后的失配指针,记住这里f要比P多一位,因为P到m-1即可,但是f还要计算出m的失配指针int f2[101];//f2用来保存KM指针,是为优化f的失配指针,f保存的是优化之后的失配指针char T[1000];//待匹配串char P[100];//模板串void getFail(char *P, int *f){ int m = strlen(P); f[0] = f[1] = 0; f2[0]=f2[1]=0; for(int i = 1; i < m; i++) { int j = f2[i]; while(j && P[i] != P[j] ) j = f2[j]; f2[i+1] = f[i + 1] = (P[i] == P[j]) ? j + 1 : 0; //既然i+1的失配位置指向j+1,但是P[i+1]和P[j+1]的内容是相同的 //所以就算指针从i+1跳到j+1去,还是不能匹配,所以f[i+1]直接=f[j+1] if(f[i+1]==j+1 && P[i+1]==P[j+1]) f[i+1]=f[j+1]; }}void find(char *T, char *P, int *f) //找到所有匹配点{ int n = strlen(T); int m = strlen(P); int j = 0; for(int i = 0; i < n; i++) { while(j && T[i] != P[j]) j = f[j]; if(T[i] == P[j]) j++; if(j == m) printf("%d\n", i - m + 1); }}/*************************KMP模板****************************/int main(){ return 0;}
KMP模板
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。