KMP小结

来源:互联网 发布:建筑工程预算软件 编辑:程序博客网 时间:2024/05/15 03:32

KMP中最重要的就是Next数组。Next[i]:前i个字符所组成的字符串中的最大前后缀匹配长度

弄清楚之后就可与做题了

Seek the Name, Seek the Fame POJ - 2752
这个题意真的是难懂。还以为有多少子串可以顺着读和反着读是一样的,这样是不是很难。。

其实就是求前缀中后缀等于前缀的,用Next数组从后往前怼一下就行了

Count the string HDU - 3336
这个对Next数组的理解更深了。要求一个字符串中有多少个前缀。直接将Next的峰值记录一下,然后将记录从后往前怼一下

Blue Jeans POJ - 3080
暴力+kmp
就是枚举第一串的子串,然后对后面串的kmp
这里我WA了好几发,首先以为是长度相同的先出现的先输出,
这里是字典序小的先输出。

String Problem HDU - 3374
题意:求一个串中最小串和最大串的位置以及出现的次数
位置要用最小最大表示法的方法求,
然后次数用kmp中的next数组

HDU 6153 A Secret
题意:给你s串和p串,问ps
因为inf敲成了1000000009….WA到怀疑人生….

分析:先将s串和p串反转,就相当于求在s串中多有少p串的前缀。
法一:用p串去匹配s串,然后在每次不匹配的时候记录这个时候p的匹配长度。注意在匹配完s之后,如果这个时候的p的匹配长度j>0的时候,要根据j=Next[j],记录一下j,然后将记录的值从后往前加一下,这个时候就把每个长度的数量求出来了。因为如果长度为3的前缀,那么就一定也是长度为2的前缀
法二:构成p+’#’+s串,然后求出Next数组,记录Next的峰值,然后从后往前加一下,这个时候就把每个长度的数量求出来了

原创粉丝点击