关闭

poj 3461 Oulipo(KMP)

标签: pojkmp
262人阅读 评论(0) 收藏 举报
分类:

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

大意是这样的:在一篇没有空格的文章中找到给定的词,统计出现的次数输出。

用KMP求出前缀-后缀编码,将词当做模式串在文章中不断移动寻找相同的词。

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn1=1e4+5,maxn2=1e6+5;
char s1[maxn1],s2[maxn2];
int snext[maxn1],len;
void getnext(){
    int i=0,j=-1;
    snext[0]=-1;
    while(i<=len){
        if(j==-1||s1[i]==s1[j])snext[++i]=++j;
        else j=snext[j];
    }
}
int main()
{
    //freopen("cin.txt","r",stdin);
    int t,i,j;
    cin>>t;
    while(t--){
        scanf("%s%s",s1,s2);
        len=strlen(s1);
        getnext();
        int ans=0,length=strlen(s2);
        i=0,j=0;
        while(i<length){
            if(j==-1||s1[j]==s2[i]){
                i++;
                j++;
            }
            else j=snext[j];
            if(j==len){
                ans++;
                j=snext[j];
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:268130次
    • 积分:8163
    • 等级:
    • 排名:第2646名
    • 原创:569篇
    • 转载:12篇
    • 译文:0篇
    • 评论:32条
    我的链接
    最新评论