用一个实际的例子来说明,经历了看懂,看不懂,看懂,看不懂,看懂...后我终于决定把它记下来了。

例子字符串为:abaabaca

首先可以肯定,第一个位置永远位0,第二个位置永远为1.那么可以初始化如下表格:

a b a a b a c a
0 1            

然后求上表中红色的a多对应的值:公式为(a前面的字符串中所有前缀字符与a前面的字符串中所有后缀自付中所有后缀字符相同的字符的最大中长度最长的长度)+1;

公式看起来很复杂,一步一步来说明:

首先是前缀字符和后缀字符,拿字符abcde来举例:

前缀字符有:a、ab、abc、abcd ;后缀字符有:e、de、cde、bcde;

由此可见前缀字符就是第一个字符、(第一个字符第二个字符)、... 、(第一个字符...第n-1个字符)

后缀字符就是第n个字符、(第n-1个字符第n个字符)、... 、 (第二个字符...第n个字符)

在abcde中,前缀字符与后缀字符没有相同的字符串存在,所以最大的相同字符串的长度位0;

在回到上表中的红色的a,它前面的字符串为  ab  ;ab的前缀字符有 {a} ;后缀字符有{b},最大的相同字符串的长度为0,

根据公式,上表中红色的a对应的位置应当填入0+1=1;获得下表:

a b a a b a c a
0 1 1          

下面求上表中红色a位置的值

上表中红色a前面的字符串为 aba; 它的前缀字符串有 {a ,ab};后缀字符串有{a,ba};最大的相同字符串的长度为1(都有相同的元素a),根据公式,上表中红色的a对应的位置应当填入1+1=2;获得下表:

a b a a b a c a
0 1 1 2        

然后求上表中红色b位置的值

上表中红色b前面的字符串为 abaa;它的前缀字符串有{a , ab,aba};后缀字符串有{a,aa,baa};最大的相同字符串的长度为1(都有相同的元素a),根据公式,上表中红色的b对应的位置应当填入1+1=2;获得下表:

a b a a b a c a
0 1 1 2 2      

然后求上表中红色a位置的值

上表中红色a前面的字符串为 abaab;它的前缀字符串有{a,ab,aba,abaa};后缀字符串有{b,ab,aab,baab};最大的相同字符串的长度为2(都有相同的元素ab),根据公式,上表中红色a对应的位置应当填入2+1=3;获得下表:

a b a a b a c a
0 1 1 2 2 3    

然后求上表中红色c位置的值

上表中红色c前面的字符串为abaaba;它的前缀字符串有{a,ab,aba,abaa,abaab};后缀字符串有{a,ba,aba,aaba,baaba};最大的相同字符串的长度为3(都用相同的元素aba),根据公式,上表中红色a对应的位置应当填入3+1=4;获得下表:

a b a a b a c a
0 1 1 2 2 3 4  

最后就是求上表中红色的a的值了,自己试试吧,答案选中下面的表格得见:

a b a a b a c a
0 1 1 2 2 3 4 1

KMP算法NEXT数组纯手工生成相关推荐

  1. KMP算法next数组详解

    ==> 学习汇总(持续更新) ==> 从零搭建后端基础设施系列(一)-- 背景介绍 KMP算法的核心就是利用已匹配的信息来指导模式串的匹配.这里的已匹配信息叫做部分匹配表,也叫做next数 ...

  2. 【文文殿下】浅谈KMP算法next数组与循环节的关系

    KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...

  3. KMP 算法Next数组

    导读 KMP算法是一种模式匹配的改进算法,其中重要的一步就是对于Next数组的求解,下面就来聊聊这个问题. 求解方法 第一位的next值为0,第二位的next值为1,后面求解每一位的next值时,根据 ...

  4. KMP算法next数组构建形式(几种常见的形式+例题)

    第一种形式 数据结构实验之串一:KMP简单应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Descrip ...

  5. 串的模式匹配、KMP算法、nextval数组求法

    一.暴力匹配 #include <iostream> using namespace std; #define MAXLEN 255 typedef struct{char ch[MAXL ...

  6. [数据结构]模式匹配算法--KMP算法详解

    目录 一. 模式匹配 二. 模式匹配算法 1. 朴素模式匹配算法 2. KMP算法 1). KMP算法的优势 2). KMP算法的原理 3). next数组的构造 4). 利用next数组匹配的过程 ...

  7. hiho 1015 KMP算法 CF 625 B. War of the Corporations

    #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...

  8. 数据结构——模式匹配kmp算法

    暴力算法 //暴力算法 int index(SString S,SString T,int pos) {int i=pos,j=1;while(i<=S[0]&&j<=T[ ...

  9. BF算法与KMP算法详解

    目录 一.前言 二.BF算法 代码: 三.KMP算法 next数组: 关于为什么要找最长匹配前后缀: 代码: KMP: 代码: 三.代码汇总: 一.前言 说到字符串匹配,就不得不提BF算法和KMP算法 ...

最新文章

  1. 手机显示服务器无数据返回,服务器无返回数据处理
  2. 土人系列AS入门教程--实战篇
  3. WPF 路由事件初步
  4. Python编程基础:第三十八节 问答游戏Quiz Game
  5. java调用 火眼臻睛,连接创新,发现未来,臻识科技受邀CCF-GAIR,论道浪潮之巅...
  6. java开发plc上位机软件开发_上位机开发之西门子PLC-S7通信实践
  7. innerHTML和value的区别
  8. 控制台程序转化为windows服务
  9. 7-5 sdut-验证“哥德巴赫猜想” (10 分)(优化素数判断)
  10. 超级详细的IDEA设置Java类和方法的注释模板
  11. iphone双卡双待神器android,荐好货:让iPhone变双卡双待神器大盘点
  12. 【详解】指令系统中跳转指令与OF,SF,CF,ZF的关系
  13. 图神经网络和强化学习
  14. 0045-量化第十天:QMT-以DMA指标为例调用系统指标
  15. 天风掌财社新股认购如何操作?
  16. XMind8激活为Pro教程(Windows+Mac)
  17. [精简]托福核心词汇53
  18. 数据结构之树和二叉树算法实现(C语言)
  19. 内网穿透(natapp的使用)
  20. 登陆操作:用户名和密码及进行录入判断 当用户名是li 密码是123456的时候显示登陆成功 。如果密码和用户名录入错需要循环录入。 并且录入错误次数超过三次提示:账号已锁。并且停掉循环

热门文章

  1. 基于前端HTML+CSS+JS实现2022城市新年贺卡特效
  2. Jsoup从一个文件加载一个文档
  3. python把数据变为数据框_将Python dict转换为数据框
  4. 线性回归 —— python
  5. 爬虫必备反爬技能:使用动态ip
  6. 多元线性回归模型-数学建模类-matlab详解
  7. 鸿蒙不是安卓也不是Linux
  8. xpress-mp优化实例精选_量化研究每周精选-20170711
  9. 服务器系统崩溃文件系统损坏,explorer启动崩溃,提示文件系统错误-2147219200
  10. 永恒python配合什么主武器好_学点python吧,别再这么累了,让你轻松实现财富自由...