字符串匹配 KMP算法
2016-03-30 22:57
405 查看
/* description: 字符串匹配 KMP算法 <<编程之法>> P134 author: JasonZhou date: 2016-03-29 */ #include<iostream> #include <string> using namespace std; void calculate_next(string p,int next[]) { int len=p.length(); int k= -1,j=0; next[0]=-1; while(j < (len-1)) { if(k == -1 || p[j] == p[k]) { ++k; ++j; next[j]=k; } else { k = next[k]; } } } int KmpSearch(string s1,string s2,int next[]) { int i=0; int j=0; int len1=s1.length(); int len2=s2.length(); while (i<len1 && j<len2) { if (j== -1 || s1[i]==s2[j]) { i++; j++; } else { j=next[j]; } } if (j==len2) { return i-j; } else { return -1; } } int main() { //原字符串 string s1="jadfasjfabcdabdabcjdafjakf"; //要匹配的字符串 string s2="abcdabdabc"; int next[10]={0}; calculate_next(s2,next); cout<<"----next array----"<<endl; for (int i=0;i<10;i++) { cout<<next[i]<<" "; } cout<<endl; int point=KmpSearch(s1,s2,next); cout<<"---search---"<<endl; cout<<s1<<endl; for (int j=0;j<point;j++) { cout<<" "; } cout<<s2<<endl; cout<<"在原字符串匹配成功的位置:"; cout<<point<<endl; return 0; }
相关文章推荐
- RESTful Web Services之Struts2 REST
- Android 绘画基础:Canvas Paint 类
- Spring启动容器初始化Listener
- openssl和java关于rsa的交互
- [置顶] unity中点击屏幕2d图片的移动和旋转
- Vendor code “Vendor number” is not authorized for “item number”
- #Android OkHttp使用教程
- 1015. 德才论 (25)
- 数据库中的名词解释
- Bzoj 2789: [Poi2012]Letters 树状数组,逆序对
- 大数计算问题
- HDU 5285 wyh2000 and pupil 判二分图+贪心
- UIKit 框架之<UIScrollView>
- C常用字符串函数
- 构建权限树
- js中callback.call()和callback()的区别
- 设置启动Activity(初始显示界面)的方法
- 逆向随笔 - strcmp函数的实现和分析
- iOS 保持界面流畅的技巧
- Django 操作笔记