您的位置:首页 > 其它

poj 3461 Oulipo kmp字符串匹配

2015-08-01 18:17 429 查看
//#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

//string a,b;
char a[10000],b[1000000];
int asize,bsize;
int kmp(){
int *pi = new int [asize];
pi[0] = -1;
for(int i = 1,k = -1;i<asize;i++){
while(k>-1&&a[k+1] != a[i])
k = pi[k];
if(a[k+1] == a[i])
k++;
pi[i] = k;
}
int result = 0;
for(int i = 0,k = -1;i<bsize;i++){
while(k>-1&&a[k+1] != b[i])
k = pi[k];
if(a[k+1] == b[i])
k++;
if(k == asize - 1){
result++;
k = pi[k];
}
}
return result;
}

int main(){
int times;
//cin >> times;
scanf("%d",×);
while(times--){
scanf("%s%s",a,b);
asize = strlen(a);
bsize = strlen(b);
printf("%d\n",kmp());
//a.clear();
//b.clear();
//cin >> a >> b;
//cout << kmp() << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: