2019独角兽企业重金招聘Python工程师标准>>>

一、KMP算法之Next数组代码原理分析

      1.Next数组定义

当模式匹配串T失配的时候,Next数组对应的元素指导应该用T串的哪个元素进行下一轮的匹配。

我们会发现,匹配串T下标为1位置的next数组的值总为0,而其他位置需要看该位置的前缀和后缀有几个匹配的字符,比如有n个匹配的字符,则next数组的值为n+1。

      2.分析next数组代码实现

如下图所示,我们通过代码来分析一下next数组的实现思路:


// 获取匹配串每个位置的next值
void get_next(String T, int *next){// T[0]用来存放匹配串的长度j = 0;i = 1;next[1] = 0; // 我们可以确定next[1] = 0while(i<T[0]){if(j == 0 || T[i] == T[j]){ // 匹配时,比如从后缀3和前缀1开始匹配开始,一直到后缀5和前缀3都是匹配的i++; // i指向我们的后缀j++; // j指向我们的前缀next[i] = j; // 当前匹配串与目标串相匹配的时候,next数组的值赋给当前匹配串位置的下一个位置,即j+1}else{ // 出现失配的情况// j回溯j = next[j]; // 比如后缀6与后缀4不匹配时,将此时的j回溯到j为4时的next数组值,即回溯到j=2的位置}// 因为前缀是固定的,后缀是相对的}}

本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!

转载于:https://my.oschina.net/aibinxiao/blog/1853308

数据结构与算法之KMP算法中Next数组代码原理分析相关推荐

  1. KMP算法之NEXT数组代码原理分析 - 数据结构和算法38

    KMP算法之NEXT数组代码原理分析 让编程改变世界 Change the world by program KMP算法之NEXT数组代码原理分析 NEXT数组:当模式匹配串T失配的时候,NEXT数组 ...

  2. 数据结构与算法之KMP算法

    数据结构与算法之KMP算法 目录 KMP算法介绍 输入字符串str1,str2,返回字符串str2是否在str1中,在的话在第几位开始 1. KMP算法介绍 在CSDN上看到一篇写的很好的关于KMP的 ...

  3. 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)

    #笔记整理 若不了解串的定义,可至: 串(string)的定义与表示 查看 串的模式匹配算法 求子串位置的定位函数 Index(S, P, pos) 求子串的定位操作通常称作串的模式匹配(其中子串P称 ...

  4. 【数据结构】详解KMP算法

    字符串匹配算法:简单来说就是给你一个主串和一个子串,让你查找子串在主串中的位置,找到返回下标. 常见的两种算法:BF算法.KMP算法 这两种算法是怎样的思路呢,我们接着往下看: 目录 BF算法(暴力算 ...

  5. 《数据结构》实验报告四:串的模式匹配(BF算法、KMP算法)

    一.实验目的 1.了解串的基本概念. 2.掌握串的模式匹配算法的实现 . 二.实验预习 说明以下概念 1.模式匹配: 串的模式匹配就是子串的定位运算. 设有两个字符串 S 和 T ,S为主串(正文串) ...

  6. 【C语言】算法学习·KMP算法

    KMP算法(全称Knuth-Morris-Pratt字符串查找算法,由三位发明者的姓氏命名)是可以在文本串s中快速查找模式串p的一种算法. 要想知道KMP算法是如何减少字符串查找的时间复杂度的,我们不 ...

  7. 图解算法:KMP算法

    目录 第一章 暴力匹配实现 第二章 KMP算法介绍 第三章 KMP算法原理 第四章 KMP的匹配表 第五章 KMP算法实现 项目地址:https://gitee.com/caochenlei/algo ...

  8. leetcode旋转数组 c语言,leetcode explore 初级算法第三题,旋转数组代码实现

    leetcode explore 初级算法第三题,旋转数组代码实现.原题链接: 题目分析 因为题目不是很长,这里把题目贴出来: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. ...

  9. JDK 中的 BIO 实现原理分析(二十)

    今天对JDK 中的 BIO 实现原理进行分析 一.简介 对比 Linux 上网络编程,我们会发现 JDK Socket 的编程逻辑是一模一样的.实际上也是这样,JDK 网络编程也没有做很多事,主要还是 ...

最新文章

  1. 2022-2028年中国六氟化硫行业市场研究及前瞻分析报告
  2. numa节点_漫步云端NUMA调度
  3. android studio 实用指南,《Android Studio实用指南》4.27 使用演示模式(示例代码)
  4. JS实现各种复制到剪贴板
  5. 单手撑跨栏、两个空翻,终于看到了比人厉害的机器人
  6. 安卓 php环境 app,安卓系统lighttpd-php-mysql本地环境
  7. in、at和on作为方位介词_21
  8. 苹果计算机磁盘格式,Mac 上“磁盘工具”中可用的文件系统格式
  9. Elasticsearch学习之基本核心概念
  10. 批量查看域用户登录计算机信息
  11. 工大瑞普 NP-ISIS综合实验
  12. 小伙用C++搞定远程桌面监控系统,轻松拿下12家offer!
  13. VMware卸载后再安装时网络连接处没有虚拟网卡
  14. 【C语言】贪吃蛇小游戏代码详解
  15. 关于大学生活的一些经验与感悟
  16. js:Cannot use import statement outside a module
  17. 岗位:python后端工程师
  18. 学妹知道了这 19 条建议后,大学生活过得有滋有味
  19. qcow2 磁盘镜像文件的创建、格式化、分区、挂载
  20. Unity Layer预设 默认设置Layer

热门文章

  1. mac连接ubuntu,tomcat乱码
  2. php的数据结构_php数据结构有哪些
  3. mysql必背_必背的mysql语句.doc
  4. 对称加密、非对称加密深度解析
  5. Spring Boot快速搭建Web开发框架(Hibernate+Thymeleaf)
  6. Windows 下使用ftp批处理脚本
  7. [微积分] 常用定义与公式
  8. 邮件 查看html源码,微软 Win10解决邮件显示HTML源代码的问题
  9. php 读取文件的所有图片格式,扣丁学堂PHP培训简述PHP如何读取文件夹下所有图片、文件-php文件...
  10. Python函数式编程之Map