hihoCoder-#1015 KMP算法

原题地址:http://hihocoder.com/problemset/problem/1015

首先要对KMP算法进行了解,知道next数组的求法;
本题让求模式串出现的次数,在匹配完一个模式串换下一个模式串起始若用当前的头的后一位重新开始算又违背了i不后退的初衷将导致T,处理为将令length-1此刻的j = next[j]

源程序代码
#include
#include
#include
#include
#define MAX 1000000
using namespace std;

int Next[MAX];

void NEXT(string par)
{
    int len = par.length();
    int i = 0;
    int j = -1;
    Next[0]=-1;
    while(i1)
    {
        if(j == -1 || par[i] == par[j])
        {
            i++;
            j++;
            Next[i] = j;
        }
        else
        {
            j = Next[j];
        }
    }
//  for(int i = 0; i
//      cout<
} 

int KMP(string par, string ori)
{
    int i = 0;
    int j = 0;
    int num = 0;
    while(iif(j==-1 || ori[i] == par[j])
        {
            i++;
            j++;
        }
        else{
            j = Next[j];
        }
        if(j == par.length())//为新一轮匹配做处理 
        {
            num++;
            i--;
            j--;
            j = Next[j];
        }
    }
    return num;
}

int main()
{
    string ori, par;
    int num, n;
    cin>>n;
    while(n--)
    {
        num = 0;
        memset(Next, 0, sizeof(Next));
        cin>>par;
        cin>>ori;
        NEXT(par);
        num = KMP(par, ori);
        cout<return 0;
}

你可能感兴趣的:(hiho刷题日记)