KMP模板

a是主串,b是模式串,ans是模式串在主串的出现次数。

int j = 0, ans = 0, m = strlen(b+1), n = strlen(a+1);
nxt[1] = 0;
for(int i = 2; i <= m; i++) {
    while(j && b[j+1] != b[i]) j = nxt[j];
	if(b[i] == b[j+1]) j++;
	nxt[i] = j;
}
j = 0;
for(int i = 1; i <= n; i++) {
	while(j && a[i] != b[j+1]) j = nxt[j];
	if(a[i] == b[j+1]) j++;
	if(j == m) j = nxt[j], ans++;
}

你可能感兴趣的:(模板,KMP)