kmp算法next表构建函数---已改良

#include <iostream>
#include <cstring>
using namespace std;

int *nextBuild(char *p)
{
    
    
    size_t m=strlen(p),j=0;
    int *n=new int[m];
    int t=n[0]=-1;
    while(j<m-1)
    {
    
    
        if(t<0||p[j]==p[t])
        {
    
    
            t++;j++;
            n[j]= (p[j]!=p[t]?t:n[t]);
        }
        else
            t=n[t];
    }
    return n;
}

int main()
{
    
    
    char s[100];
    gets(s);
    int *n= nextBuild(s);
    printf("%d",n[4]);
}

猜你喜欢

转载自blog.csdn.net/niko02/article/details/121573906