您的位置:首页 > 其它

hdu 1686(kmp)

2012-05-07 17:41 169 查看
/*
*  kmp
*/
#include <cstdio>
#include <iostream>

using namespace std;

const int N = 10005;
const int M = 1000005;

int next
;
char pat
, str[M];

void indexNext() {
int k = 0;
next[1] = 0;
for (int i=2; pat[i]; ++i) {
while (k && pat[k+1]!=pat[i]) k = next[k];
if (pat[k+1] == pat[i]) ++k;
next[i] = k;
}
}

int kmp() {
int k = 0, cs = 0;
int lenPat = strlen(pat) - 1;
for (int i=1; str[i]; ++i) {
while (k && pat[k+1]!=str[i]) k = next[k];
if (pat[k+1] == str[i]) ++k;
if (k == lenPat) ++cs, k = next[k];
}
return cs;
}

int solve() {
indexNext();
return kmp();
}

int main() {
int t;
scanf ("%d", &t);
str[0] = pat[0] = '#';
while (t--) {
scanf ("%s%s", pat+1, str+1);
printf ("%d\n", solve());
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: