关闭

【POJ 3461 KMP】

376人阅读 评论(0) 收藏 举报
分类:

题目链接: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));
    }
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:108747次
    • 积分:2985
    • 等级:
    • 排名:第12181名
    • 原创:198篇
    • 转载:15篇
    • 译文:0篇
    • 评论:7条