KMP模板
2016-07-02 00:10
253 查看
思路来自Matrix67:http://www.matrix67.com/blog/archives/115
void pre(string str){ int j=-1; next[0]=-1; for(int i=1;i<str.size();i++){ while(j>=0&&str[j+1]!=str[i]) j=next[j]; if(str[j+1]==str[i]) j++; next[i]=j; } } int kmp(string str1,string str2){ pre(str2); int ans=0; int j=-1; for(int i=0;i<str1.size();i++){ while(j>=0&&str2[j+1]!=str1[i]) j=next[j]; if(str2[j+1]==str1[i]) j++; if(j==str2.size()-1){//找到一次 ans++; j=next[j];//继续向后找 } } return ans; }
void get_next() { int k=-1,j=0; next[0]=-1; while(j<pl) { if(k==-1||p[j]==p[k]) { j++;k++; next[j]=k; } else k=next[k]; } } int KMP() { int i=0,j=0; get_next(); while(j<pl&&i<sl) { if(j==-1||s[i]==p[j]) { i++;j++; } else j=next[j]; if(j==pl) { sum++;j=next[j]; } } return sum; }
相关文章推荐
- Python命令行工具集——pycli
- C++Primer 第7章笔记整理
- iOS GPUImage之GPUImageFilterGroup组合滤镜(5)
- java反射
- [仙人掌直径 单调队列 DP] BZOJ 1023 [SHOI2008]cactus仙人掌图
- Xutils——BitmapUtils单例实现
- VC++学习笔记之函数调用约定
- iOS的UIView和CALayer
- 数据结构-线性表
- 如何安装配置Redis
- 实训周报1-AlexNet论文全解读
- Spring Boot 下配置SpringDataJpa
- IPV6基础知识
- win2008 r2 hyper-v虚拟机的安装使用图文教程第1/2页
- [环套树 单调队列DP] BZOJ 1791 [Ioi2008]Island 岛屿
- 自定义数据类型 --- 类的属性和方法全解(swift2.3)
- uva 1583 Digit Generator(水题 打表)
- MAC下安装vmware fusion8虚拟机软件
- Android逐帧动画的简单使用-语音播放效果的实现
- 李洪强-HEAD 和nil和NULL