首页 > 学院 > 开发设计 > 正文

kmp

2019-11-08 19:50:48
字体:
来源:转载
供稿:网友
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int MAXL=1000;char T[MAXL+1],P[MAXL+1];int next[MAXL+1]; int kmp()//返回T中P第一次出现的起始位置{ int Tl=strlen(T),Pl=strlen(P); int i,j; next[0]=next[1]=0; //初始化next数组 for(i=1;i<Pl;i++) { j=next[i]; while(j&&P[i]!=P[j]) j=next[j]; next[i+1]=(P[i]==P[j])?j+1:0; } // j=0; for(i=0;i<Tl;i++) { while(j&&P[j]!=T[i]) j=next[j]; if(P[j]==T[i]) ++j; if(j==Pl) return i-Pl+1; }}int main(){ cin>>T>>P; cout<<kmp(); return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表