[模板]KMP算法
来源:互联网 发布:淘宝代充可靠吗 编辑:程序博客网 时间:2024/06/10 00:01
KMP算法用于单个字符串匹配
其时间复杂度为O(n+m)
暴力为O(nm)
其核心在于失配函数(next数组)的自配过程NEXT
如:
S_ 12345123451235……
T_ 123451235(x)
_________123451235(√)
模板代码:
#include<cstdio>#include<iostream>using namespace std;int ne[1001];string s,t;void NEXT(int n){//求失配函数 ne[0]=-1; int j=-1;//表示初始时的匹配状态和全部失配的状态 for(int i=1;i<n;i++){ while(j>-1&&t[i]!=t[j+1])j=ne[j];//失配了,跳到上一个同字符的状态 if(t[i]==t[j+1])j++; ne[i]=j;//若连续成功匹配则单调递增 }}void KMP(int n,int m){//类似与NEXT int j=-1; for(int i=0;i<n;i++){ while(j>-1&&s[i]!=t[j+1])j=ne[j]; if(s[i]==t[j+1])j++; if(j==m-1){ printf("%d\n",i-m+2); } }}int main(){ cin>>s; cin>>t; NEXT(t.size()); KMP(s.size(),t.size()); for(int i=0;i<t.size();i++)printf("%d ",ne[i]+1);}
阅读全文
0 0
- 【KMP】KMP算法模板
- kmp算法模板
- kmp算法模板
- KMP算法模板
- KMP算法模板
- KMP算法(模板)
- KMP算法模板
- KMP算法标准模板
- KMP算法模板
- KMP算法模板
- KMP算法模板
- KMP算法模板
- KMP算法模板
- KMP 算法模板
- kmp算法模板
- kmp算法模板
- KMP算法模板
- KMP算法模板
- PAT(B)_1037. 在霍格沃茨找零钱(20)
- laravel(六)-Blade模板
- ckeditor上传图片时与后端的csrfToken验证
- LeetCode-Add to List 71. Simplify Path
- React-Native中的Text
- [模板]KMP算法
- spring boot mybatis打印sql
- Nginx实现虚拟主机 练习总结2017-6-20
- Glide类似You cannot start a load for a destroyed activity异常简单分析
- 51 WebGL切换着色器
- java异常捕获的一点感悟
- Longest Increasing Subsequence
- openwrt 免密码登陆到其他系统
- Spark+scala+Idea wordcount 示例