#include <stdio.h> #include <stdlib.h> #include <string.h> char s[1000000],t[1000000]; int next[1000000],a,b,i,j,k; int main() { while(~scanf("%s %s",s,t)) { a=strlen(s); b=strlen(t); j=0; k=-1; next[0]=-1; while(j<b) { if(k==-1||t[k]==t[j]) { k++; j++; next[j]=k; } else k=next[k]; } i=0; j=0; while(i<a&&j<b) { if(j==-1||s[i]==t[j]) { i++; j++; } else j=next[j]; } if(j==b)printf("%d\n",i-b+1); else if(i==a)printf("-1\n"); } return 0; } next保存的是字符串t前几位和开头的相同。请使用手机"扫一扫"x
KMP算法
最新推荐文章于 2023-01-23 18:57:44 发布