[时空权衡]字符串匹配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
= il2+1

;
             
break

;
          }
      }
     
return

ans ;
}

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

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

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

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


相关推荐

  • php 从第几个字符替换,php中几个字符串替换函数详解[通俗易懂]

    php 从第几个字符替换,php中几个字符串替换函数详解[通俗易懂]在php中字符替换函数有几个如有:str_replace、substr_replace、preg_replace、preg_split、str_split等函数,下面我来给大家总结介绍介绍.一、str_replace(find,replace,string,count)作用:str_replace()函数使用一个字符串替换字符串中的另一些字符。参数描述find必需,规定要查找的值.repla…

    2022年5月13日
    56
  • 2021navicat激活码(注册激活)

    (2021navicat激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    708
  • eclipse汉化教程(官方汉化包,傻瓜式操作,附带中英文快捷切换方式)

    eclipse汉化教程(官方汉化包,傻瓜式操作,附带中英文快捷切换方式)eclipse汉化教程(官方汉化包,傻瓜式操作)首先到eclipseIDE中,点击‘Help’>‘Installnewsoftware…’在弹出的Install窗口中点击Add按钮Name任意填Location填https://download.eclipse.org/technology/babel/update-site/R0.18.3/2021-03/这里解释一下这个Location的出处,是在Eclipse官方的babel语言包project网页上找的,可能不是最

    2022年6月6日
    45
  • Latex 公式换行 等号左对齐

    Latex 公式换行 等号左对齐Latex公式换行等号左对齐示例:\begin{equation}\begin{aligned}X^TXh-X^TY&amp;=\begin{bmatrix}x_1&amp;x_2&amp;…&amp;x_n\\1&amp;1&amp;…&amp;1\end{bmatrix}\begin{bmatrix}x_1…

    2022年6月9日
    247
  • 淘宝装修html代码大全_上古卷轴装修材料代码

    淘宝装修html代码大全_上古卷轴装修材料代码http://blog.sina.com.cn/s/blog_506f1f940100hv9d.html淘宝网店装修HTML代码大全,包括淘宝装修代码,插入图片代码,公告滚动代码,不不一定要懂网站知识,不一定要懂HTML语言,看完这个就可以装修网店的,你不一定要全部看完,可以当成是一个字典查找就好了。一、插入图片代码:注:先把图片上传到网络相册网络地址,把它拷贝下来,

    2025年7月22日
    3
  • C语言位运算符详解「建议收藏」

    C语言位运算符详解「建议收藏」目录位运算符简介1、按位与位运算符简介C语言既具有高级语言的特点,又具有低级语言的特性,如支持位运算就是其具体体现。这是因为,C语言1、按位与

    2022年10月5日
    2

发表回复

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

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