您的位置:首页 > 其它

KMP模板

2016-05-04 23:18 316 查看
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++;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: