KMP
2015-10-18 23:08
239 查看
#include <iostream> using namespace std; int KMPIndexHelp(const string &T,const string &P,int pos,int next[]) { int i=pos,j=0; while(i<T.length()&&j<P.length()) { // cout<<"111"<<endl; if(j==-1) { i++; j=0; }else if(P[j]==T[i]) { cout<<"j="<<j<<"i="<<i<<endl; i++; j++; }else { j=next[j]; cout<<"j="<<j<<endl; } } cout<<"j="<<j<<endl; cout<<"P.length()="<<P.length()<<endl; if(j<0&&P.length()>=0||j<P.length()) { return -1; } else { return i-j; } } void getNext(const string &P,int next[]) { int j=0,k=-1; next[0]=-1; while(j<P.length()-1)//应为递推 { // cout<<next[j]<<endl; // cout<<j<<endl; if(k==-1) { //cout<<"333"<<endl; next[j+1]=0; j++; k=0; }else if(P[j]==P[k]) { next[j+1]=k+1; k++; j++; }else k=next[k]; } } int KMPIndex(const string &T,const string &P,int pos=0) { int *next=new int[P.length()]; getNext(P,next); int result=KMPIndexHelp(T,P,pos,next); delete []next; return result; } void main() { cout<<KMPIndex("abbababa","abc",0)<<endl; }
相关文章推荐
- iOS UITableView-FDTemplateLayoutCell框架 cell重叠 高度返回0.5问题解决
- test02
- 简单的交换两个变量的数值
- HBase shell命令小记
- 地理学的十四大原理
- MyEclipse就会报 Errors running builder 'DeploymentBuilder' on project '工程名' xxx
- 10G数据量,只有2G内存,怎样找到中位数?
- Android开发系列(三) 跟随移动userguide
- UFT练习
- C学习笔记(六)函数、数组与指针
- JS模板引擎
- [swift] Async
- 变量用法总结
- 函数
- 17网络编程
- 第八章软件动态测试
- LoadRunner常见问题整理
- 信息安全系统设计基础第五周学习总结
- Frogger(链式前向星+spfa小改动)
- nginx实现tcp反向代理