假设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. PHP类的自动载入机制

    php的自动加载: 在php5以前,我们要用某个类或类的方法,那必须include或者require,之后才能使用,每次用一个类,都需要写一条include,麻烦 php作者想简单点,最好能引用一个类 ...

  2. LANMP 如何禁止访问 .htaccess 文件

    很多朋友问我,为什么他已经在 Apache 规则里面加了禁止别人直接下载 .htaccess 文件,为什么还是可以下载? 其实这个很简单,因为 .htaccess 在 LANMP 环境下,当他作为文件 ...

  3. jQuery select的操作代码

    jQuery對select的操作的实际应用代码. //改變時的事件  复制代码代码如下: $("#testSelect").change(function(){ //事件發生  j ...

  4. PHP中strtotime函数使用方法分享

    在PHP中有个叫做strtotime的函数.strtotime 实现功能:获取某个日期的时间戳,或获取某个时间的时间戳.strtotime 将任何英文文本的日期时间描述解析为Unix时间戳[将系统时间 ...

  5. Delphi XE5教程6:单元的结构和语法

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...

  6. DBCC Check

    DBCC CHECKDB 可以完成两个任务 (1)检查数据库里有没有损坏发生 (2)尽力修复数据库损坏,是数据能重新被正常访问 DBCC 下列步骤执行下列操作 1.检查一些关键性的表 sysalocu ...

  7. java排序集锦

    java实现排序的一些方法,来自:http://www.javaeye.com/topic/548520 package sort; import java.util.Random; /** * 排序 ...

  8. glog使用

    How To Use Google Logging Library Glog 的基本使用方法在google code上有介绍:How To Use Google Logging Library ;最好 ...

  9. 【nodejs】 文件系统(fs) 之读写文件

    //写入文件 var data = "hello world"; fs.writeFile('c:\\a.txt', data, 'ascii', function(err) { ...

  10. Android之EditText

    EditText 属性介绍: maxLength:设置最大输入字符数. hint:设置空白提示文字. textColorHint:设置空白提示文字的颜色. enabled:设置是否可编辑(可以获得焦点 ...