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

HDU1686 KMP模板

时间:2016-07-30 20:58:03      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:

  仍旧是裸的字符串匹配可以拿来熟悉下字符串匹配问题,我是用来熟悉KMP的。

 

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N = 1e6+5;
const int M = 1e4+5;

char txt[N] , pat[M];
int pf[M];


void CPF()
{
    pf[1] = 0;
    int k = 0;
    int len = strlen(pat+1);
    for (int i=2;i<=len;i++)
    {
        while (k && pat[k+1]!=pat[i])
            k = pf[k];
        if (pat[k+1]==pat[i])
            k++;
        pf[i] = k;
    }
}


int KMP()
{
    int k = 0 , ans=0;
    int lent = strlen(txt+1) , lenp = strlen(pat+1);
   // cout << lent << " " << lenp << endl;
    for (int i=1;i<=lent;i++)
    {
        while (k && txt[i]!=pat[k+1])
            k = pf[k];
        if (pat[k+1]==txt[i])
            k++;
        if (k==lenp)
        {
            ans++;
        }
    }
    return ans;
}

 

HDU1686 KMP模板

标签:

原文地址:http://www.cnblogs.com/bdNestInLastation/p/5721612.html

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