【POJ 3461 KMP】

题目链接:http://poj.org/problem?id=3461

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s1[10005],s2[1000005];
int next[10005];
void getNext(char *p,int *next){
    next[0]=-1;
    int i=0,k=-1,len;
    len=strlen(p);
    while(i<len){
        if(k==-1 || p[i]==p[k]){
            i++;
            k++;
            next[i]=k;
        }
        else
            k=next[k];
    }
}
int Kmp(char *s,char *p,int *next){
    getNext(p,next);
    int i=0,k=0,ans=0,len1,len2;
    len1=strlen(s);
    len2=strlen(p);
    while(i<len1){
        if(k==-1 || s[i]==p[k]){
            i++;
            k++;
        }
        else
            k=next[k];
        if(k==len2){
            ans++;
            k=next[k];
        }
    }
    return ans;
}
int main(){
    int test;
    scanf("%d",&test);
    while(test--){
        scanf("%s",s1);
        scanf("%s",s2);
        printf("%d\n",Kmp(s2,s1,next));
    }
}

阅读更多
上一篇【AC自动机】
下一篇【POJ 2752 KMP之next】
想对作者说点什么? 我来说一句

poj3167 Cow Patterns

问题转化+kmp

sdfzyhx sdfzyhx

2016-08-28 15:29:43

阅读数:623

没有更多推荐了,返回首页

关闭
关闭