码迷,mamicode.com
首页 > 其他好文 > 详细

KMP 剪花布条hdoj2087

时间:2016-05-07 13:24:27      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

#include<stdio.h>
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <string.h>
using namespace std;
int Next[1005]={-1};
char a[1005],b[1005];
int m,n,cnt;
void getNext()
{   int t=-1;
    int j=0;
    while(j<m-1)
    {
        if(t<0||b[j]==b[t])
        {
            t++;j++;
            Next[j]=(Next[j]==Next[t]?Next[t]:t);
        }
        else
        {
            t=Next[t];
        }
    }
    return;
}
int KMP()
{
    cnt=0;
    int i=0;
    int j=0;

        while(i <n &&j<m)
        {
            if(j<0 || a[i]==b[j])
            {
                i++;j++;
            }
            else
            {
                j=Next[j];
            }
            if(j==m)
            {
                cnt++;
                j=0;
            }

        }



    return cnt;

}
int main()
{
    while(scanf("%s",a)!=EOF)
    {
        if(a[0]==# && strlen(a) ==1) break;
        else
        {
            scanf("%s",b);
            n=strlen(a);
            m=strlen(b);
            getNext();
            printf("%d\n",KMP());
        }
    }

    return 0;
}

 

KMP 剪花布条hdoj2087

标签:

原文地址:http://www.cnblogs.com/vector11248/p/5468050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!