码迷,mamicode.com
首页 > 其他好文 > 详细

关于字符串问题【KMP】

时间:2017-09-16 18:48:22      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:是你   公式   过程   子串   相等   恐惧症   很多   匹配   简单的   

今天重点学了学字符串,算是为以前的字符串恐惧症填坑(想想一个KMP都背不熟的lz)

KMP很简单,主要是维护p数组(定义:在一个字符串里,1~p[i]这个串和i-p[i]+1~i这个串相等)对于字符串的匹配问题(求子串、公共前(后)缀)很常用,也是很基础的算法了。

有一道简单的KMP题:caioj1457
很多人秒切但是你知道为甚这样套公式就行了吗?
定理:假设S的长度为len,则S存在循环子串,当且仅当,len%(len-p[len])==0,最短循环子串为S[len-p[len]]
例子证明:
设S=q1q2q3q4q5q6q7q8,并设p[8]=6,
此时str=S[len-p[len]]=q1q2,
由p的定义可知,q1q2q3q4q5q6=q3q4q5q6q7q8,
即有q1q2=q3q4,q3q4=q5q6,q5q6=q7q8,
即q1q2为循环子串,且易知为最短循环子串。
由以上过程可知,若len%(len-p[len])==0,则S存在循环子串,否则不存在。

对于KMP两串或多串匹配大佬肯定没什么问题了。

 

关于字符串问题【KMP】

标签:是你   公式   过程   子串   相等   恐惧症   很多   匹配   简单的   

原文地址:http://www.cnblogs.com/AKCqhzdy/p/7531757.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!