KMP模板

kmp,就是对于一个串A,对于每个位置i找到一个j(0<=j

我的fail数组就是next,kmp本质上是一个一条链的ac自动机。

#include
using namespace std;
const int Maxn=1000005;
char s1[Maxn],s2[Maxn];
int l1,l2,fail[Maxn];
void Fail(){//构造fail数组 
	for(int i=2,j=0;i<=l2;++i){
		while(j&&s2[j+1]!=s2[i])j=fail[j];
		if(s2[j+1]==s2[i])++j;
		fail[i]=j;
	}
}
void Match(){
	for(int i=1,j=0;i<=l1;++i){
		while(j&&s2[j+1]!=s1[i])j=fail[j];
		if(s2[j+1]==s1[i])++j;
		if(j==l2){
			//找到一个串,自行维护 
			j=fail[j];
		}
	}
//	for(int i=1;i<=l2;++i)cout<

 

你可能感兴趣的:(字符串,模板,kmp)