KMP模板(附练习题)
来源:互联网 发布:淘宝联盟多店合并下单 编辑:程序博客网 时间:2024/06/05 02:54
首先需要知道前缀和后缀的概念
前缀:指的是字符串的子串中从原串最前面开始的子串,不会加入最后的字符,如abab的前缀有:a,ab,aba
后缀:指的是字符串的子串中在原串结尾处结尾的子串,不会加入第一个字符,如abab的后缀有:b,ab,bab
接着是next数组:
最后就是通过next数组进行KMP匹配算法。
next数组代码:
void GetNext(string B){ int len_B = B.size(); nex[0] = -1; int k = -1,j = 0 ; while(j < len_B) { if(k == -1 || B[j] == B[k]) { ++ k; ++ j; nex[j] = k; } else k = nex[k]; }}
KMP函数模板:
int kmp(string A, string B){ int ans = -1, i = 0, j = 0; int len_B = B.size(), n = A.size(); while(i<n) { if(j==-1||A[i] == B[j]) { ++i; ++j; } else j = nex[j]; if(j == len_B) { return i-len_B + 1; //A数组从0开始所以应返回的位置+1. } } return ans;}
POJ-1961
POJ-3461
POJ-2752
POJ-2406
HDU-2087
HDU-1686
HDU-2203
HDU-1358
HDU-1711
HDU-1238
参考博客:http://blog.csdn.net/qq_36345036/article/details/77386646
阅读全文
1 0
- KMP模板(附练习题)
- HDU 1711 裸KMP,附KMP模板
- 史上最难oracle数据库练习题(附答案)
- kmp模板(HD1711)
- KMP算法(模板)
- KMP(模板)
- hdu2203(KMP模板)
- (扩展KMP)模板
- (LA3026) Period -- KMP again (KMP 模板)
- KMP(1)--hdu2203(简单KMP模板)
- poj3461 (裸kmp)kmp模板
- 浅析KMP算法(附C++源码)
- Number Sequence(kmp模板)
- POJ3461(KMP模板题)
- POJ3461(KMP模板题)
- 完美拓印(kmp模板)
- KMP模板(具体代码)
- 字符串匹配 KMP(模板)
- Android 多点触摸协议(Multi-touch Protocol)
- Java Web系列-任务调度SpringTask
- maven的配置和一些依赖
- 签到
- 复变函数-第一章-复数与复变函数
- KMP模板(附练习题)
- 通过Spring JDBC+checkbox标签实现批量删除功能
- 内联函数
- hping的亲自安装教程(纯手打)...QAQ
- 游戏相关缩写
- ExtJS ComboBox 下拉列表详细用法
- 自定义语言的实现——解释器模式(一)
- html笔记
- Job react 基础知识回顾4-事件