假设s1里找s2,
然后s2进去匹配
假设在第三位失配
那么说明前两位是匹配成功的
如果这时候将s2后移一位相当于将s2的第一位和s2的第二位比较,如果我们已知s1(1)≠s1(2)那么就可以直接后移两位
而这时候就是s1(1)和s1(3)比较,如果s1.1=s1.3那就可以直接后移3位了
我们的目标就变成了在s1里找到一个递推式满足f(i)
i表示在第i位失配后移的位数
现在要找递推方法,假设f(i)已知现在由f(i)推出f(i+1)
假设f(i)=k,现在假设失配位是k,我们要做的就是找到一个最大的m满足 s1[0],s1[1]....s1[m-1]  ==  s1[k-m],s1[k-m+1]...s1[k-1]
回到刚刚的我们假设f [i] = k,那么f [i+1]有3种情况:
①s1[k+1] == s1[i+1] —>f[i+1]=k+1
②如果s1[k+1] != s1[i+1] —>问题就变成了在前k个里找一个最大的s使得s1[0],s1[1]...s1[s] == s1[k+1-s], s1[k-s] ...s1[k+1]
这个s是已知的,就是f[k+1]
③f[k+1] <=0 —>f[j+1] = 0
 
That is over.
 
 
 
 
 
 

看到一个推荐的blog讲的超详细我这么蒻都看懂了七七八八
http://www.matrix67.com/blog/archives/115
mark一下√
 
 

 
//我们要在a串中找b串出现的次数 b串叫做模式串,a串叫做匹配串
考虑暴力匹配的时候在匹配串枚举模式串的开头在哪里,一位一位比较是不是相同,不相同的话就把开头往下移以为继续判断
假设模式串匹配了1~j位,在j+1位和匹配串发生了冲突,这时候要在匹配串重新设置开头从哪一位开始匹配。
/*
  比如原先是i开头,就比较i~i+j-1位,然后这i~i+j-1位都是相同的,但是在i+j位它会变成不同的
  这时候如果暴力移动指针的话,如果发现从i+1到i+j-1中有一段和i开始到i+j-1位中间有一段是相同的话,那就可以把中间那段替换过去
*/
//其实就是不匹配的那个的前面X位还是后面X位有匹配串的开头资磁的XX位就移到X位去
//这样时间复杂度就低啦
 
 
 
 
 
 
 
 

 
 
//hzwer说这玩意儿NOIP不考,省选考,标记一下
 

 
 突然发现的blog感觉排版什么的很资磁
https://blog.sengxian.com/algorithms/kmp#main
 
 
 
 
 
 
 
 
 
 

KMP笔记√//找最大子串,前缀自匹配长度的更多相关文章

  1. KMP小扩展,找出子串在主串中出现的所有位置

    KMP算法能够高效地匹配字符串,找出子串(T串)在主串(S串)中出现的首个位置的原算法网上已经有很多优秀的博文进行详细讲解,这里就不多赘述. 这篇博文主要是对KMP原算法稍作改动,使其能够在主串中把所 ...

  2. KMP算法 - 求最小覆盖子串

    KMP与最小覆盖子串 最小覆盖子串:对于某个字符串s,它的最小覆盖子串指的是长度最小的子串p,p满足通过自身的多次连接得到q,最后能够使s成为q的子串. 比如: 对于s="abcab&quo ...

  3. 字符串(后缀数组):HAOI2016 找相同子串

    [HAOI2016]找相同子串 [题目描述] 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两个子串中有一个位置不同. [输入格式] 两行,两个字符 ...

  4. 阅读OReilly.Web.Scraping.with.Python.2015.6笔记---找出网页中所有的href

    阅读OReilly.Web.Scraping.with.Python.2015.6笔记---找出网页中所有的href 1.查找以<a>开头的所有文本,然后判断href是否在<a> ...

  5. ArcGIS案例学习笔记-找出最近距离的垂线

    ArcGIS案例学习笔记-找出最近距离的垂线 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:对于任意矢量要素类,查找最近距离并做图 数据: 方法: 0. 计算 ...

  6. 项目发布之后 总提示有一个.DLL找不到或不匹配

    最近发布项目(.net,winform)总提示有一个.dll文件找不到或者不匹配 但是在本地调试是正常的 这个.dll,原来是从.net组件中引用到项目的,后来我将此.dll文件从网上下载,然后在项目 ...

  7. [HAOI2016]找相同子串

    这题感觉有点坑啊. 题目还是不难想的,先对一个字符串建后缀自动机,然后拿另一个字符串在上面跑. 假设当前跑到了p点,匹配长度为len. 那么当前会对答案产生贡献的串是哪些呢? 显然当前会对p及p到根的 ...

  8. 【poj 3090】Visible Lattice Points(数论--欧拉函数 找规律求前缀和)

    题意:问从(0,0)到(x,y)(0≤x, y≤N)的线段没有与其他整数点相交的点数. 解法:只有 gcd(x,y)=1 时才满足条件,问 N 以前所有的合法点的和,就发现和上一题-- [poj 24 ...

  9. poj3261 后缀数组求重复k次可重叠的子串的最长长度

    Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 13669   Accepted: 6041 Ca ...

随机推荐

  1. 匹配一级分类和二级分类 名字和url 里面有玄机

    1:要匹配的html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  2. CDH JPS 出现没有名字的进程

    jps 时出现没有名字的进程 或者process information unavailable 把服务关掉,执行一下 rm -rf /tmp/hsperfdata_* 再重启就好了.

  3. 如何使用js捕获css3动画

    如何使用js捕获css3动画 css3动画功能强大,但是不像js,没有逐帧控制,但是可以通过js事件来确定任何动画的状态. 下面是一段css3动画代码: #anim.enable{ -webkit-a ...

  4. js根据IP取得天气

    <span id="weather"></span> <script> function weather(cityName) { var cha ...

  5. 对图片进行各种样式裁对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等剪:圆形、星形、心形、花瓣形等--第三方开源--CustomShapeImageView

    CustomShapeImageView在github上的项目主页是:https://github.com/MostafaGazar/CustomShapeImageView 如果仅仅是需要获取圆形. ...

  6. python杂记-5(装饰器)

    1.被装饰的函数有参数(一个参数): def w1(func): def inner(arg): # 验证1 # 验证2 # 验证3 return func(arg) return inner @w1 ...

  7. javascript和jquery 获取触发事件的元素

    一个很简单的问题,却因为大意,经常忘了处理,导致程序运行出错. <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  8. oracle数据库一些问题

    1.oracle12安装的过程中需要注意字符的选择(特别注意 选择ZHS16GBK 国内企业大多选这个   否则创建数据的时候会出现中文变成问号) 2.设置密码是必须是大小写混合的 pl/sql32链 ...

  9. SVN四部曲之SVN命令精通

    SVN 常用命令一览表 命令 功能 使用格式 checkout 检出 svn  co  URL up 更新到当前URL的末端 svn  up switch 更新到某一tag/branch svn  s ...

  10. 适配iOS10以及Xcode8-b

    现在在苹果的官网上,我们已经可以下载到Xcode8的GM版本了,加上9.14日凌晨,苹果就要正式推出iOS10系统的推送了,在此之际,iOS10的适配已经迫在眉睫啦,不知道Xcode8 beat版本, ...