KMP

来源:互联网 发布:oracle导入数据 编辑:程序博客网 时间:2024/04/30 04:23
#include"iostream"#include"cstdio"using namespace std;#define maxlen 100int fail[maxlen];void makefail(char *t,int lt){--t;for(int i=1,j=0;i<=lt;i++,j++){fail[i]=j;while(j>0&&t[i]!=t[j]) j=fail[j];}}int kmp(char *s,int ls, char *t,int lt,int i,int &longest,int &lp){longest=lp=0;--s;--t;for(int j=1;i<=ls;i++,j++){while(j>0&&s[i]!=t[j]) j=fail[j];if(j>longest) {longest=j;lp=i-j;}if(j==lt) return i-lt;}return -1;}int main(){char s[100]="fbaataa";char t[100]="baaa";int longest,lp,pos;pos=kmp(s,strlen(s),t,strlen(t),0,longest,lp);  cout<<longest<<" "<<lp<<" "<<pos<<endl;//longest:最长匹配的长度  lp:最长匹配的起始位置 pos:第一个匹配到的位置return 0;}

0 0