码迷,mamicode.com
首页 > 其他好文 > 详细

KMP求模式串在原串中出现的次数

时间:2014-11-19 22:16:01      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:blog   io   ar   2014   log   amp   ef   as   c   


#include <stdio.h>
#include <string.h>

#define maxn 10010

int next[maxn];
char str[maxn], buf[maxn * 100];

void getNext() {
	int i = 0, j = -1;
	next[i] = j;
	while(str[i]) {
		if(j == -1 || str[i] == str[j]) {
			++i; ++j;
			if(str[i] == str[j]) 
				next[i] = next[j];
			else next[i] = j;
		} else j = next[j];
	}
}

void KMP() {
	getNext();
	int i = 0, j = 0, ans = 0;
	while(buf[i]) {
		if(j == -1 || buf[i] == str[j]) {
			++i; ++j;
			if(!str[j]) {
				++ans; j = next[j];
			}
		} else j = next[j];
	}
	printf("%d\n", ans);
}

int main() {
	// freopen("stdin.txt", "r", stdin);
	int N;
	scanf("%d", &N);
	while(N--) {
		scanf("%s%s", str, buf);
		KMP();
	}
	return 0;
}


KMP求模式串在原串中出现的次数

标签:blog   io   ar   2014   log   amp   ef   as   c   

原文地址:http://blog.csdn.net/chang_mu/article/details/41289521

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!