字符串处理——KMP模板
代码
//查找模式串在母串的出现次数
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std ;
const int maxn = 1e6+5;
int Next[maxn];
char str[maxn];//母串
char mo[maxn];//模式串
int n1,n2;//母串和模式串的长度
void GetNext()
{
int i=0,j=-1;
while(i<n2)
{
if(j==-1||mo[i]==mo[j]) {++i,++j,Next[i]=j;}
else j=Next[j];
}
return ;
}
int kmp()
{
int cnt=0;
int i=0,j=0;
while(i<n1)
{
if(j==-1||str[i]==mo[j]) i++,j++;
else j=Next[j];
if(j==n2)
{
cnt++;//统计出现次数
j=0;//不可重叠的不可重叠的情况
j=Next[j];//可重叠的情况
}
}
return cnt;
}