博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拓展KMP以及模板
阅读量:4320 次
发布时间:2019-06-06

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

废话不多说,上模板

#include
const int maxn = 1e6 + 10;int Next[maxn], extend[maxn], moL, strL;///Next数组、extend数组、模式串长度、母串长度char mo[maxn], S[maxn];///模式串、母串void GetNext()///求解模式串 mo 的 Next 数组{ Next[0] = moL; int a, p; for (int i = 1, j = -1; i < moL; i++, j--){ if (j < 0 || i + Next[i - a] >= p){ if (j < 0) p = i, j = 0; while (p < moL && mo[p] == mo[j]) p++, j++; Next[i] = j; a = i; } else Next[i] = Next[i - a]; }}void GetExtend()///模式串 mo 对主串 S 求解 extend 数组{ GetNext(); int a, p; ///记录匹配成功的字符的最远位置p,及起始位置a for (int i = 0, j = -1; i < strL; i++, j--){ ///j即等于p与i的距离,其作用是判断i是否大于p(如果j<0,则i大于p) if (j < 0 || i + Next[i - a] >= p){ ///i大于p(其实j最小只可以到-1,j<0的写法方便读者理解程序) if (j < 0) p = i, j = 0; ///如果i大于p while (p < strL && j < moL && S[p] == mo[j]) p++, j++; extend[i] = j; a = i; } else extend[i] = Next[i - a]; }}
Template

 

本文实际就是为了记录一下较好的拓展KMP资料...........

 

问题提出 : 给出子串以及母串,我们定义extend[i]表示从母串的第 i 字符开始到最后(也就是从 i 位置开始的后缀 )与子串的最长公共前缀长度,现在要求在线性时间内对于母串的所有位置求出extend值即extend[ 0~strlen(母串)-1 ]

 

参考 : 在网上看了好多博客,都不能看的非常明白,直到遇到这个图文并茂的博客,强烈推荐 ==> 

 

完了嘛?嗯,完了……

转载于:https://www.cnblogs.com/LiHior/p/7575386.html

你可能感兴趣的文章
sessionStorage
查看>>
代码示例_进程
查看>>
Java中关键词之this,super的使用
查看>>
学习进度
查看>>
“此人不存在”
查看>>
github.com加速节点
查看>>
解密zend-PHP凤凰源码程序
查看>>
python3 序列分片记录
查看>>
Atitit.git的存储结构and 追踪
查看>>
atitit 读书与获取知识资料的attilax的总结.docx
查看>>
B站 React教程笔记day2(3)React-Redux
查看>>
找了一个api管理工具
查看>>
Part 2 - Fundamentals(4-10)
查看>>
使用Postmark测试后端存储性能
查看>>
NSTextView 文字链接的定制化
查看>>
第五天站立会议内容
查看>>
ATMEGA16 IOport相关汇总
查看>>
JAVA基础-多线程
查看>>
面试题5:字符串替换空格
查看>>
[Codevs] 线段树练习5
查看>>