[时空权衡]字符串匹配KMP算法代码(引自算法导论)

[时空权衡]字符串匹配KMP算法代码(引自算法导论)

这里只贴一份来自《算法导论》的伪代码改写的代码。

void KMP_prefix( const char *t, int *
next )
{

     
int len =

strlen(t) ;
     
int i, j = –1

;
      next[
0] = –1

;
     
//请读者自行思考i什么时候增长



     for( i=1; i<len; ++
i )
      {  
    
//

i永远和j+1位的比较(因为j初始值为-1)
    
//如果失配就执行跳转。直到j为-1为止。



         while( (j+1>0)&&(t[j+1]!=
t[i]) )
              j
=

next[j] ;
    
//如果匹配,则两个串的指针都增长



         if( t[j+1]==
t[i] )
             
++

j ;
    
//

这句很抽象,意思是:
    
//

跳转的位置永远是匹配成功的下一位
    
//也是唯一给跳转表赋值的一句



          next[i] = j+1
;
      }
}

//主函数:可以看出这个函数与上面的函数极其相似


int KMP_matcher( const char *s, const char *t, int
beg )
{

     
int l1 = strlen(s), l2 =

strlen(t) ;
     
int *next = new int

[l2] ;
      KMP_prefix( t, next ) ;
     
int i, j = –1, ans =

beg ;
     
for( i=beg; i<l1; ++

i )
      {

         
while( (j+1>0)&&(t[j+1]!=

s[i]) )
          {

              j
=

next[j] ;
          }
         
if( t[j+1]==

s[i] )
          {

             
++

j ;
          }
         
if( j+1==

l2 )
          {

              ans
= i–l2+1

;
             
break

;
          }
      }
     
return

ans ;
}

转载于:https://www.cnblogs.com/microgrape/archive/2011/05/12/2043927.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110615.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 计算机三级数据库知识点[通俗易懂]

    计算机三级数据库知识点[通俗易懂]考完三级瞬间轻松,做题时记的知识点,(乱序版,懒得整理了,主要用于选择和填空) dbo:databaseowner(数据库的创建者,创建该对象的用户.)guest:顾客(能够访问数据库中对象的数据,要求dbo分配权限给guest,一般给他查看的权限select,它没有对应的登录账户名)数据库应用系统设计每个步骤都按照数据组织与存储、数据访问与处理、应用设计等几个方面进行。数据库概念…

    2022年6月18日
  • mac怎么上传文件到服务器_window上传文件到linux

    mac怎么上传文件到服务器_window上传文件到linux前言我们使用mac时,想让本地文件上传至服务器,该怎么办呢windows系统,我们可以使用xftp或者rz命令,那么mac呢?mac系统,我们可以使用sftp、scp或者rz命令,本文介绍sft

    2022年7月30日
  • hadoop常用命令汇总[通俗易懂]

    hadoop常用命令汇总[通俗易懂]1、查看目录下的文件列表:hadoop fs –ls [文件目录]hadoop fs -ls -h /lance 2、将本机文件夹存储至hadoop上:hadoop fs –put [本机目录] [hadoop目录] hadoop fs -put lance / 3、在hadoop指定目录内创建新目录:hadoop fs –mkdir [目录] hadoop fs -mkdir /lance4、在…

    2022年6月24日
  • altium designer绘制51单片机最小系统

    altium designer绘制51单片机最小系统一、绘制51单片机原理图库新建原理图库,并ctrl+s保存起来2、画出方框,并放置引脚,如下图。注意:画出第一个引脚后,可以双击修改它的编号为1,之后再次放置引脚时,编号会自动从1开始自加。3、在方框的左右两边放置引脚注意:新拖出来的引脚,带x号的一端,为将来要与导线连接的一端,所以,这一端要朝芯片的外部。按下空格键,可以实时修改引脚的方向4、编辑引脚定义。点击右下角的SCH,打开库浏览器,双击我们刚才建立好的这个原理图库文件(默认名称为Component_1…

    2022年6月23日
  • 我的手机软件

    我的手机软件总结一下现在我装的软件,这些我都有安装版,兄弟们可以复用:)我的手机:Nokia6680操作系统:Symbian60Ⅲ目前手机上装的:6630EditableQuickOffice2.sisoffice套件,实际用的很少。6681字典字库.SIS字典,有用。ACM超级来电管家来电管家,当然有用啦,防火墙,自动短信回复…

    2022年7月11日
  • 110道Java初级面试题及答案(最新Java初级面试题大汇总)

    110道Java初级面试题及答案(最新Java初级面试题大汇总)史上最全Java初中级面试题,发现网上很多Java初级面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~本人发现网上虽然有不少Java相关的面试题,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题,并站在面试官的立场上,给出我自己的答案。如果不背Java面试题的答案,肯定面试会挂!这套Java面试题大全,希望对大家有帮助哈~博主已将以下这些面试题整理成了一个Java面试手册,是PDF版的1、为

    2022年7月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号