KMP算法
来源:互联网 发布:伊苏里亚王朝 知乎 编辑:程序博客网 时间:2024/05/21 15:46
问题描述:有一个文本串S,和一个模式串P,查找P在S中的位置
暴力破解法:
- int ViolentMatch(char* s, char* p)
- {
- int sLen = strlen(s);
- int pLen = strlen(p);
- int i = 0;
- int j = 0;
- while (i < sLen && j < pLen)
- {
- if (s[i] == p[j])
- {
- //①如果当前字符匹配成功(即S[i] == P[j]),则i++,j++
- i++;
- j++;
- }
- else
- {
- //②如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0
- i = i - j + 1;
- j = 0;
- }
- }
- //匹配成功,返回模式串p在文本串s中的位置,否则返回-1
- if (j == pLen)
- return i - j;
- else
- return -1;
- }
看的头大 http://blog.csdn.net/v_july_v/article/details/7041827 ~~~~
#include <iostream>#include <string>using namespace std;void getnext(string p,int next[]){int plen=p.length();next[0]=-1;int k=-1;//前缀int j=0;//后缀while(j<plen-1){if (k==-1 || p[j]==p[k]){j++;k++;if(p[j]!=p[k])next[j]=k;else//不出现循环next[j]=next[k];}else{k=next[k];}}}void kmp(string s,string p,int next[]){int slen=s.length();int plen=p.length();int i=0;int j=0;while(i<slen-1 && j<plen-1){if(j==-1 || s[i]==p[j])//j==-1 !!!!!{i++;j++;}elsej=next[j];}if(j==plen-1){cout<<"true"<<endl;}elsecout<<"false"<<endl;}int main(){string s;string p;cin>>s;cin>>p;int *next=new int[p.length()];getnext(p,next);kmp(s,p,next);delete [] next;return 0;}
0 0
- KMP算法详解 【KMP】
- 【KMP】KMP算法模板
- KMP hihoCoder1015 KMP算法
- kmp算法
- KMP算法
- KMP算法
- KMP算法
- KMP算法
- KMP 算法
- kmp算法
- KMP算法
- kmp算法
- KMP算法
- KMP算法
- kmp算法
- kmp算法
- KMP算法
- KMP算法
- ecshop数据库的操作及必备函数用法大全
- Cordova + Android Studio 1.0配置
- P114 第七章思考与练习
- C++ socket shutdow 与 close 的使用
- Cocos2d-3.x_Android物理按键回调
- KMP算法
- bestcoder round37 1001
- liunx版pgadmin3 source code安装
- myeclipse解决js文件的报错
- leetcode 21 Merge Two Sorted Lists
- PHP官网上给用户的提示
- 线性分类器设计
- Android ActionBar的源代码分析(四)
- 使用Spring MVC3和Hibernate4做网站的一些记录