KMP
来源:互联网 发布:现在淘宝开什么店赚钱 编辑:程序博客网 时间:2024/05/16 01:13
void calculateNext(string p,int *next){ next[0]=-1; next[1]=0; for(int i=1;i<p.size()-1;i++){ int k = next[i]; while( p[i]!=p[k]){ if(k == -1){ next[i+1] = 0; break; } k = next[k]; } if(k != -1) next[i+1] = k+1; }}vector<int> KMP(string t,string p){ vector<int> indexVec; int count=0; // calculate next[] int next[p.size()]; calculateNext(p,next); printf("next[%d]:",p.size()); for(int i = 0;i < p.size(); i++) cout<<next[i]<<" "; cout<<endl; // pattern match // i is cursor on t[] (base of pattern) // j is cursor on p[] (cursor of match) int i=0,j=0; int tl=t.length(); int pl=p.length(); while(i+pl-1 < tl){ while (j < pl){ count++; if(t[i+j] != p[j]){ // a mismatch found i += j-next[j]; // move i to i + j-next[j] j = next[j]; // move j to next[j] if(j==-1) j=0; break; } else{ // keep matching j++; } } if( j == p.length() ){ // a pattern match is found// cout<<i<<endl; indexVec.push_back(i); // store index i += j-next[j]; // move i to i + j-next[j] j = next[j]; // move j to next[j] if(j == -1) j=0; } } cout<<"count:"<<count; cout.flush(); return indexVec;}
0 0
- KMP
- KMP
- KMP
- KMP
- KMP
- KMP
- kmp
- kmp
- KMP
- kmp
- KMP
- KMP
- KMP
- kmp
- KMP
- KMP
- kmp
- KMP
- 禁止使用finalize方法
- ClickableSpan 的点击效果
- plsql developer连接WIN 64位操作系统,ORACLE11G服务端的问题
- [MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
- Recover Binary Search Tree leetcode c++
- KMP
- 层的缓冲运动
- POJ 3616 Milking Time 动态规划
- ios低内存警告处理
- Android锁屏或灭屏状态下,快速按两次音量下键实现抓拍功能(1.2Framework层使用startService形式实现)
- spark的优点与理论
- dubbo创建打成jar时的相关问题
- Android——JSON数据解析详解
- iOS CoreBluetooth 教程蓝牙技术