KMP 字符串匹配算法

       KMP算法是一种线性时间字符串匹配算法,这个算法不用计算变迁函数,匹配时间为O(n),只用到了辅助函数π,这是在O(m)的时间内根据模式预先计算出来的。

      模式的前缀函数π包含有模式与自身的位移进行匹配的信息。简单的来说,如果字符串中某前缀的后缀包含了某前缀,则在比较的时候能够免去对无用位移进行测试。

 

     构件π函数的伪代码如下所述

m=length(P);

k=0;

π(1)=0;

   for q=2 to m

      {

       while(k>0&&P(k+1)==P(q))

              k=π(k);

      if(P(k+1)==P(q))

           k=k+1;

      π(q)=k;

}

 

      简单的用java代码实现如下所示

 

对于题目:在n个txt文档中找含有字符串“love”的文档。这个相对于上述KMP算法就简单的多了。该字符串中无重复字符,更不用提重复的前后缀了。在匹配的时候,指针扫描,如果出现不匹配现象,直接当前文档位置的字符从l开始匹配即可。查找时间为线性时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值