扩展KMP板子转载

扩展KMP板子

<strong><span style="font-size:14px;">/*主函数里初始化和调用*/  
/*next[0] = 0; 
exkmp(s2+1,s2,next+1,next); 
exkmp(s1,s2,ex,next);*/  

void exkmp(char s1[],char s2[],int ex[],int next[])  
{  
    int i,j,p;  
    i = j = 0;  
    p = -1;  
    while(s1[i]!='\0')  
    {  
        if( p == -1)  
        {  
            j = 0;  
            do  
                p++;  
            while(s1[i+p] != '\0'&&s1[i+p] == s2[j+p]);  
            ex[i] = p;  
        }  
        else if(next[j] < p)  
            ex[i] = next[j];  
        else if(next[j] > p)  
            ex[i] = p;  
        else  
        {  
            j = 0;  
            while(s1[i+p] != '\0'&&s1[i+p] == s2[j+p])  
                p++;  
            ex[i] = p;  
        }     

        i++;  
        j++;  
        p--;  
    }  
    ex[i] = 0;  
    return;  
}  
</span></strong>  

猜你喜欢

转载自blog.csdn.net/m0_37630059/article/details/80700934
今日推荐