之前看的模模糊糊现在终于清楚了。

主要是这一段代码的问题

void getkmp()
{int k=-1,j=0;nex[0]=-1;while(j<m){if(k==-1||b[j]==b[k]){k++;j++;nex[j]=k;}elsek=nex[k];}
}

next[j]表示b串0~j-1的最长前缀后缀字串的长度//特别重要

例如b数组:  a  b a a b b a b a a b

那next数组:-1 0 0 1 1 2 0 1 2 3 4 5

设用b串来匹配大串a

设next[j]=x;

一个可以确定的就是,b串的0~x-1与 j-x~j-1 的元素是相同的

然后开始匹配,展示复杂度会被优化的地方。

串串是从i=0开始记录的

设a:abcdabcdabce  变量用j

设b:abcdabce 变量用k

a和b一个一个匹配到了a[7]='d' , b[7]='e',不相等了,然后此时k=j=7;

然后你知道了0~6他们俩都是匹配的,这个时候可以直接k=next[k]=3;j此时还是7

开始问自己,为啥k=next[k]呢?

想要从a串中找到一个b串的话,现成的匹配成功的部分就剩下了b数组的0~next[k]-1;

也就是说a的4~6(a[j-3]~a[j-1])部分与b串中的0~2,都是下划线部分相同。

这时候你就比较a[j]与b[ next[k] ]不相等就完了,此时的话就是a[7]与b[3],相等话接着匹配,直到j=b串长度的时候就相当于你匹配成功,不然就吧j继续等于next[j],反正就是能与a串尽可能相同的部分。如果一直next【k】下去等于-1,那么就没用相等的,重新从b[0]与a[j]匹配,就跟刚开始的状态是一样的。

然后就是找next数组的过程,其实与找匹配的原理一样。自己模拟一边就懂了。

KMP-next数组相关推荐

  1. POJ3080方法很多(暴力,KMP,后缀数组,DP)

    题意:       给n个串(n>=2&&n<=10),每个串长度都是60,然后问所有串的最长公共子串,如果答案不唯一输出字典序最小的. 思路:直接暴力,枚举+KMP,后缀 ...

  2. kmp——next数组的应用---cout the string

    点击打开链接 这道题的意思是找出每个子串与串的匹配程度,换句话说题意是,给一串字符串,问这串字符串所有的前缀总共在这个字符串中出现了几次.一开始直接想到的事用暴力求解但是算了一下会超时. 其实准确来说 ...

  3. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛——J.最大值【KMP next数组】【暴力(数据太水了!)】

    题目传送门 题解 Ac串其实是kmp中next数组的含义,所以求 出字符串的next数组 即可得到答案. 不得不说,后台数据问题太大了,直接暴力 n 2 n^2 n2 的都能过!服了这数据 AC-Co ...

  4. 2019年秦皇岛J题:MUV LUV EXTRA(KMP后缀数组)

    Problem Description 鉴纯夏是一名成绩不太好的高中生.一天她在数学考试中碰到了一道求某条线段长度的问题.因为她并不会做这道题,所以她准确地作图后用尺子量出了这条线段的长度.不幸的是, ...

  5. HDU2594 KMP next数组的应用

    这道题就是给你两个串s1, s2让你求出s1 s2的最长相同前缀和后缀, 我们直接将s1 s2连接到一起然后处理一下next数组即可, 注意答案应该是min(len(s1), len(s2) , ne ...

  6. poj2752Seek the Name, Seek the Fame【kmp next数组应用】

    大意:给你一个串,如果这个串存在一个长度为n的前缀串,和长度为n的后缀串,并且这两个串相等,则输出他们的长度n.求出所有的长度n 例如 'alala'. Potential prefix-suffix ...

  7. 【2023王道数据结构】【字符串匹配算法】字符串的KMP(next数组)模式匹配算法C、C++完整实现(可直接运行)

    ~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 字符串的KMP(next)模式匹配算 ...

  8. HGU3336 Count the string (KMP Next数组的应用)

    题意:给出一个字符串,求它所有前缀在此字符串中出现的次数. 分析:一看,肯定是kmp中 next[i] 求以下标i-1结尾的字符串,使得最长的(前缀==后缀)的长度.很好想到,当next非零时,肯定和 ...

  9. 2019CCPC秦皇岛赛区 hdu 6740 MUV LUV EXTRA(KMP next数组)

    传送门 MUV LUV EXTRA Time Limit: 2000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Othe ...

  10. 2020-11-23(彻底理解KMP)

    文章目录 声明 暴力破解 第一步 第二步 第三步 第四步 第五步 第六步 第七步 KMP算法 定义 步骤 寻找前缀后缀最长公共元素长度 求next数组 解释 寻找最长前缀后缀 基于<最大长度表& ...

最新文章

  1. 查看git是否安装_Java程序员的必备Linux运维技能-安装git
  2. 人工智能在建筑运营_打造智能建筑商
  3. 10个业界最流行的Kubernetes发行版
  4. java中list方法addall怎么写_简历中个人优势怎么写?| 四大方法教你打造独一无二“个人标签”...
  5. 点对点(P2P)多线程断点续传的实现(转贴)
  6. 预处理_浅析雨水收集系统——雨水预处理
  7. 电力工程项目管理系统
  8. JavaFX中嵌入谷歌Chromium内核
  9. 【工具推荐】进程查看管理工具——Process Explorer
  10. USB驱动程序(四)——键盘驱动(控制传输)
  11. 微信小程序学习2022.11.22
  12. XPath解析中的 'Element a at 0x5308a80'是什么
  13. VS2015快捷键 修改
  14. 两款开源的中文OCR工具
  15. Linux之 chattr 权限详解
  16. 软件工程学科思维导图
  17. TIFF文件中 TIFFTAG_PHOTOSHOP的解析
  18. 国家发改委:“可研报告”也终身负责制
  19. 解决时间插件mobiscroll在使用过程中的一个小缺陷
  20. milovski-V-XXXXXX勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

热门文章

  1. Android 编译源码 注意事项
  2. Failed to resolve:com.android.support:appcompat-v7:报错处理
  3. Introduction to Django(The Definitive Guild to Django)
  4. 不同数据类型的处理函数(一)
  5. 2022-2028年中国重卡行业投资分析及前景预测报告
  6. DailyTick 开发实录 —— UI 设计
  7. [高中作文赏析]感受冬天
  8. 采购审批专题总结--bob
  9. 慢慢学Linux驱动开发,第十章,GNU C的扩展
  10. Jquery实战_读书笔记1—选择jQuery