KMP算法
来源:互联网 发布:color picker mac 编辑:程序博客网 时间:2024/06/04 18:54
//本程序是引用他人的思想,额,忘记是哪位大神了,这个程序是之前写的#include <iostream>#include <cstring>using namespace std;//方便对照,BFMatch函数是原始匹配函数int BFMatch(char *s,char *p){int i=0,j=0;int nSLen=strlen(s),nPLen=strlen(p);while(i<nSLen){j=0;while(s[i]==p[j]&&j<nPLen){i++;j++;}if(j==nPLen){return i-nPLen;}i=i-j+1;//指针i的回溯}return -1; }//getNext函数创建next[],作用与指针回调void getNext(char *p,int *next){int j=0,k=-1;int nPLen=strlen(p);next[0]=-1;while(j<nPLen-1){if(k==-1||p[j]==p[k]){//匹配情况下p[j]=p[k],p[0..k]=p[j-k,j] k++;j++;next[j]=k;//next[j+1]=next[j]+1=k+1;}else{k=next[k];}}}//KMP算法根据next[]来进行匹配int KMPMatch(char *s,char *p){int i=0,j=0;int nSLen=strlen(s),nPLen=strlen(p);int next[100];getNext(p,next);while(i<nSLen){if(j==-1||s[i]==p[j]){i++;j++;}else{j=next[j];//消除了指针i的回溯}if(j==nPLen){return i-nPLen;}}return -1;}int main(){char *s="ababc";char *p="abc";cout<<"s:"<<s<<endl;cout<<"p:"<<p<<endl;cout<<"模式匹配位置:"<<BFMatch(s,p)<<endl;cout<<"模式匹配位置:"<<KMPMatch(s,p)<<endl; 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算法
- linux之虚拟内存相关介绍
- poj 2559 单调栈
- 重构笔记2-代码的坏味道
- 关于安卓eclipse配置环境的无法正常产生R.java
- 减少我们的IF——设计模式和委托
- KMP算法
- Android碰到的问题之一
- 这一夜
- 1196 成绩排序
- POJ2533 Longest Ordered Subsequence (最长上升子序列)
- ABAP写数据到SAP服务器文件并读取
- jdbc简单封装类
- Implement strStr() && kmp算法
- 【TCP_IP学习笔记】(1)网络协议简介