hdu 1686 kmp Oulipo

http://acm.hdu.edu.cn/showproblem.php?pid=1686

對於我這種剛開始學的人來說   剛開始我覺的很難  不會做哦    但是看了一下別人的一下子就知道了   還是不是太熟了    需要加強練習哦   呵呵

   其實這是一道簡單的kmp  的算法     只要你在index_kmp()    將 i  的值一直小於N  就可以了    還是看看我具體代碼吧     或許要看就知道了

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char w[10005],t[1000005];
int next[10005];
int N,M;
void get_next()
{
    int i=0,j=next[0]=-1;
    while(i<M)
    {
        if(j==-1||w[i]==w[j])
        {
            i++,j++;
            next[i]=j;
        }
        else j=next[j];
    }
}

int kmp()
{
    int i=0,j=0;
    int num=0;
    while(i<N)
    {
        if(j==-1||t[i]==w[j])
        {
            i++,j++;
        }
        else j=next[j];
        if(j==M)
        {
            num++;
            j=next[j];
        }

    }
  cout<<num<<endl;
}
int main()
{
    int c,h,i;
    while(cin>>c)
    {
        while(c--)
        {
            scanf("%s",w);
        scanf("%s",t);
        N=strlen(t);
        M=strlen(w);
        get_next();
        kmp();
        }
    }
}


 

發佈了46 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章