#include<iostream>
#include<cstdio>
using namespace std;
void kmp_pre(char x[], int m, int next[])
{
int i, j;
j = next[0] = -1;
i = 0;
while (i < m)
{
while (-1 != j&&x[i] != x[j])
j = next[j];
next[++i] = ++j;
}
}
void pre_kmp(char x[], int m, int kmpNext[])
{
int i, j;
j = kmpNext[0] = -1;
i = 0;
while (i < m)
{
while (-1 != j&&x[i] != x[j])
j = kmpNext[j];
if (x[++i] == x[++j])
kmpNext[i] = kmpNext[j];
else
kmpNext[i] = j;
}
}
int nx[10010];
int kmp_count(char x[], int m, char y[], int n)
{
int i, j;
int ans = 0;
kmp_pre(x, m, nx);
i = j = 0;
while (i < n)
{
while (-1 != j&&y[i] != x[j])
j = nx[j];
i++, j++;
if (j >= m)
{
ans++;
j = nx[j];
}
}
return ans;
}
int main()
{
return 0;
}
kmp【Template】
最新推荐文章于 2025-07-09 10:31:37 发布
