扩展KMP板子转载

20 篇文章 0 订阅

扩展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>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值