先写一点,慢慢补充

先记一个最重要的问题:计算next数组

这也是考试的重点

先看下如何手算next数组

了解两个概念:

  • 串的前缀 :包含第一个字符,且不包含最后一个字符的子串
  • 串的后缀 :包含最后一个字符,且不包含第一个字符的子串

举个例子:{a,b,a}  前缀是{a} {a,b}  后缀是{a} {b,a}    最长相等前后缀长度是1

计算公式:第i个字符的next数组数值=前边 i-1 个字符组成的子串的最长相等前后缀长度+1

规定第一个位置的next数组值是 0

注意:这个公式适用字符串下标从1开始的    若下标从0开始  则改成从1开始计算next数组,再全部减1就好

举个简单点的例子:串{a,a,a,b}   字符串下标从1开始

当指针指向第1个字符的时候,不用算,第一个next是0

当指针指向第2个字符的时候,当前位置前边就一个{a} 他没有前后缀,故最长相等前后缀长度就是0咯,next值为1

所以,第二个位置其实也不用算,永远都是1

当指针指向第3个字符的时候,当前位置前边的字符是{a,a},这个串有一个前缀{a} 一个后缀{a},最长相等前后缀长度就是1,故next数值是2

当指针指向第4个字符的时候,当前位置前边的字符是{a,a,a},这个串的前缀有{a} {a,a},后缀有{a} {a,a},最长相等前后缀长度就是2,next数值为3

故串{a,a,a,b}的next数组为

下标 1 2 3 4
字符 a a a b
next 0 1 2 3

有的时候,题目告诉你,字符串数组下标从0开始

比如串{a,b,a,a,b,c} 下标从0开始,求next数组

我们先把他按作下标从1开始的计算

  前缀 后缀
第一个    
第二个    
第三个 {a}   {b}
第四个 {a} {a,b}  {a} {b,a} 
第五个 {a} {a,b} {a,b,a}  {a} {a,a} {b,a,a} 
第六个 {a} {a,b} {a,b,a} {a,b,a,a} {b} {a,b} {a,a,b} {b,a,a,b}

当指针指向第1个字符的时候,next= 0

当指针指向第2个字符的时候,next=1

当指针指向第3个字符的时候,next=0+1=1

当指针指向第4个字符的时候,next=1+1=2

当指针指向第5个字符的时候,next=1+1=2

当指针指向第6个字符的时候,next=2+1=3

下标 1 2 3 4 5 6
字符 a b a a b c
next 0 1 1 2 2 3

由于下标是从0开始的,所以全部减1才是答案

下标 0 1 2 3 4 5
字符 a b a a b c
next -1 0 0 1 1 2

数据结构--串--KMP相关推荐

  1. 数据结构-串-KMP算法详解(Next数组计算)(简单易懂)

    文章目录 KMP介绍 一.求Next数组 前后缀表 求最长公共前后缀 最长相等前后缀表转Next数组 二.使用Next数组来匹配字符串 总结 本文章就专讲kmp,暴力匹配就不讲了(我相信能搜索kmp的 ...

  2. 数据结构 串 KMP 模式匹配详解 通俗易懂

    KMP 模式匹配详解通俗易懂 KMP 模式匹配是解决字符串匹配的问题 一.原始的字符串暴力匹配 要点:子串的第一个字符匹配成功主串的字符后就依次匹配子串后面的字符,直到子串匹配结束 代码: publi ...

  3. Java数据结构-串及其应用-KMP模式匹配算法

    1.前言 KMP算法是我们数据结构串中最难也是最重要的算法.难是因为KMP算法的代码很优美简洁干练,但里面包含着非常深的思维.真正理解代码的人可以说对KMP算法的了解已经相当深入了.而且这个算法的不少 ...

  4. 王道数据结构课代表 - 考研数据结构 第四章 串-KMP(看毛片算法) 究极精华总结笔记(C版本)

    本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对数据结构知识点的理解的总结.希望对新一届的计算机考研人提供帮助!!!   关于对 串 章节知识点总结的十分全面,涵括了<王道数据结构 ...

  5. 数据结构串之寻找整数

    输入一个字符串,内有数字和非数字字符,如:ak123x456 17960?302gef4563,将其中连续的数字作为一个整体,依次存放到一数组a中,例如123放入a[0],456放入a[[1]],- ...

  6. java中KMP模式,Java数据结构-串及其应用-KMP模式匹配算法

    串(string)是由零个或多个宇符组成的有限序列,又名叫字符串. 定义的解释: ??串中的字符数目n称为串的长度,定义中谈到"有限"是指长度n是一个有限的数值. ??零个字符的串 ...

  7. 数据结构—串的详细解释(含KMP算法)

    1.1串的定义 串:串是由零个或多个字符组成的有限序列,又叫字符串(其的存储结构包含顺序表存储.单链表存储的形式.) 一般记为s="a1a2a3....an"(n>=0),其 ...

  8. 数据结构:KMP算法 串的模式匹配算法(全网最详细)

    目录 KMP模式匹配算法 简述 KMP模式匹配算法原理 如果人眼来优化的话,怎样处理         接下来我们自己来发现j的移动规律: 这一段公式证明了我们为什么可以直接将j移动到k而无须再比较前面 ...

  9. 数据结构 串(字符串)与KMP

    文章目录 概述.定义 抽象数据类型(ADT, Abstract Data Type) 模式匹配 KMP算法 MP算法 KMP算法对MP算法的改进 C 实现 概述.定义 串(字符串,String)是由零 ...

  10. 数据结构——串中kmp算法求模式串中next函数值

    笔记 给定一个模式串,求next[j]值  求解方法: 1.第一位的next值为0 2.第二位的next值为1 后面求解每一位的next值时,根据前一位进行比较 3.第三位的next值:看第二位的模式 ...

最新文章

  1. HTMLButton控件下的Confirm()
  2. Uber AI实验室总结「神经进化」研究:如何利用遗传算法优化网络?
  3. LAMP网站架构方案分析
  4. WPF 将Bitmapsource转换到Emgu.cv.image
  5. ZooKeeper、Eureka谁是最好的注册中心?
  6. 打开计算机后 无法最小化,最小化窗口后无法在任务栏中显示的三种解决方法...
  7. SAP Cloud Application Programming CDS 模型间 association 的设置
  8. js html form,JavaScript 表单
  9. C++——OOP(Object-Oriented Programming) vs. GP(Generic Programming)
  10. OpenCV Cookbook by Eric
  11. windows批处理脚本导入注册表不弹出确认框
  12. xl2tpd服务一键安装
  13. 新华社-中国移动联手打造盘古搜索 2月22日上线
  14. Anaconda修改默认浏览器
  15. 怎么设置计算机 图标显示桌面快捷方式,如何设置显示桌面快捷键 设置显示桌面快捷键方法【图文】...
  16. 俱乐部2006年的首次活动-ASP.NET Webpart 开发交流会暨2005回顾
  17. 医院科室管理系统(IDEA开发)
  18. ospfdr选举规则_OSPF如何选举DR/BDR规则
  19. 某验通杀js版,流程各个验证码那对应的js分析,你确定不进来看看(无感)?
  20. 一个网站域名价值 1亿人民币,互联网寸土寸金!

热门文章

  1. 总结之:CentOS 6.5 rsync+inotify实现数据实时同步备份
  2. .Net码农就业求职储备(新手进阶)
  3. Android项目:通过ant重新打包proguard混淆器jar文件
  4. 获取Linux服务器信息脚本
  5. DataGridView - Column named XXX cannot be found
  6. AS3 的 2D向量类(Vector2D)
  7. 网络口碑Market,生来“苟且”?
  8. 一个简单的通用序列数据结构
  9. python学习day_04_字典
  10. 所有编程语言为我作证,随机数骗局大揭秘,随机数都是骗人的!