剪花布条

hdoj2087

题目大意:

解决:kmp,与poj3461神似,只需做小小的改动即可

#include <iostream>

#include <cstring>

#include <cstdio>

using namespace std;

char s[1005],t[1005];

int next[1005],lens,lent;

void getnext()

{

    int i=1,j=0;

    next[1]=0;

    while(i<=lent)

    {

         if(j==0 || t[i]==t[j])

        {

            

            i++;   j++;

            next[i]=j;

        }

        else j=next[j];

    }

}

void kmp()

{

     int i=1,j=1,cnt=0;

    while(i<=lens)

    {

        if(j==0 || s[i]==t[j])

        {

            i++;j++;//由于是非重复数据,所以j要退回到1就行了,从头匹配

            if(j>lent){cnt++;j=1;}

        }

        else j=next[j];

    }

    printf("%d\n",cnt);

}

int main()

{//由于这个地方忘记了要从s+1,和t+1开始,一直在调试,竟然忘了

    while(scanf("%s%s",s+1,t+1),s[1]!='#')

    {

        lens=strlen(s+1);

        lent=strlen(t+1);

        getnext();

        kmp();

    }

 //   system("pause");

    return 0;

}

 

你可能感兴趣的:(剪花布条)