[时空权衡]字符串匹配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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UNIX基本操作命令

    UNIX基本操作命令UNIX命令基础登录系统:输入密码,密码不显示退出系统:ctrl+dexitlogout创建/修改密码:passwd密码输入后不显示,新密码要输入两次,匹配成功才算是修改密码成功UNIX命令格式:命令选项参数快捷键:ctrl+c:中断当前命令执行并返回shellctrl+d:终端传输或结束文本编辑ctrl+s:临时中断命令的屏幕输出ctrl+q:恢复由ctrl+s的临时中断ctrl+u:清除输入的整个命令行backspace:删除某个错误输入的字符常用操作命令

    2022年5月31日
    434
  • WebSocket介绍和Socket的区别

    WebSocket介绍和Socket的区别  WebSocket介绍与原理WebSocketprotocol是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。——百度百科目的:即时通讯,替代轮询网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力通常是采用轮询、Comet技术解决。HTTP协议是非持久化的,单向的网…

    2022年7月11日
    16
  • leetcode76_leetcode72

    leetcode76_leetcode72一、问题描述Giventwointegers n and k,returnallpossiblecombinationsof k numbersoutof1… n.Forexample,If n =4and k =2,asolutionis:[[2,4],[3,4],[2,3],[1,2],[1,3]

    2026年1月28日
    3
  • 最全企业安全网管工具名单查询_企业网络安全管理要求

    最全企业安全网管工具名单查询_企业网络安全管理要求我在一家医药公司做IT运维,老板喊我做一些企业智能化的工作。我就对这块做了些调研,所以知道哪些产品好用,哪些产品不好用,整理了份名单,分享给大家公司文档加密这块:翼火蛇免费3个点,其他按照15+3/月/终端收费,在做小白鼠实验云子可信-铁卷SaaS版目前是内测阶段,是我们公司目前在使用的,还不错,推荐这个!亿赛通收费标准未知,调研过,不好用,可能需要专业人员帮助员工机器管理的:瑞星安全云终…

    2022年10月4日
    6
  • Java8 stream 之groupingBy() 分组排序

    Java8 stream 之groupingBy() 分组排序ListmatchsList=newArrayList();Map&amp;gt;MatchsListMap=matchsList.stream().collect(Collectors.groupingBy(Matchs::getMatchDate));此时MatchsListMap的排序规则是根据MatchDate降序的(默认),也就是说ma

    2022年8月20日
    51
  • java中分页查询的实现_java中分页实现步骤图解

    java中分页查询的实现_java中分页实现步骤图解java分页查询的实现分页要传入当前所在页数和每页显示记录数,再分页查询数据库,部分代码如下所示。传入参数实体类:publicclassMessageReq{privateStringmemberId;//会员idprivateintcurrentPage;//当前页privateintpageSize;//一页多少条记录privateint

    2022年10月1日
    7

发表回复

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

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