博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kmp算法的个人理解
阅读量:4612 次
发布时间:2019-06-09

本文共 724 字,大约阅读时间需要 2 分钟。

  这篇博文主要是方便我自己查找使用,网上讲kmp算法的博文已经很多了,大家如果想看其他比较详细的理解过程可以移步别处。

  kmp算法的核心部分在于next表的计算,这里我贴一下我自己常用的板子(kuangbin大神的板子)

void getNext(){    int j, k;    j = 0; k = -1; next[0] = -1;    while(j < tlen)        if(k == -1 || T[j] == T[k])            next[++j] = ++k;        else            k = next[k];}

  这版代码next[0]的值取的是-1

  下面说一下常考的next值的快速求法(以next【0】取1为例)

(1)首先第一第二位分别为0 ,1.

(2)其他next[n]是前n-1个字符,寻找从前往后和从后往前的最大长度为n-2的最大相同子串,而next值则是该子串长度加1.

这么说可能不太方便理解,下面我具体写下上述next表的求解过程。

第3位:取前两位‘ab’,无相同子串,故0+1=1;

第4位:取前3位‘aba’,能取得‘a’,‘a’,故1+1=2;

第5位:取前4位‘abaa’,能取得‘a’,‘a’,故1+1=2;

第6位:取前5位‘abaab’,能取得‘ab’,‘ab’,故2+1=3;

第7位,取前6位‘abaabc’,无法找到满足要求的子串,故0+1=1;

第8位,取前7位‘abaabca’,能取得‘a’,‘a’,故1+1=2

 

转载于:https://www.cnblogs.com/xinzhiyan/p/7728733.html

你可能感兴趣的文章
各地IT薪资待遇讨论
查看>>
splay入门
查看>>
带CookieContainer进行post
查看>>
C语言学习笔记--字符串
查看>>
CSS-上下文选择器
查看>>
ionic repeat 重复最后一个时要执行某个函数
查看>>
1.初识代码审计-基础
查看>>
[Vue-rx] Stream an API using RxJS into a Vue.js Template
查看>>
解决VC几个编译问题的方法——好用
查看>>
SPOJ #11 Factorial
查看>>
City Upgrades
查看>>
“人少也能办大事”---K2 BPM老客户交流会
查看>>
关于七牛进行图片添加文字水印操作小计
查看>>
DataSource数据库的使用
查看>>
CentOS开启samba实现文件共享
查看>>
MSSQL使用sqlbulkcopy批量插入数据
查看>>
证明一个数能被3整除,当且仅当它的各位数的和能被3整除
查看>>
2018秋寒假作业4—PTA编程总结1
查看>>
android自适应屏幕
查看>>
2019-北航面向对象-电梯作业总结
查看>>