字符串匹配
next数组是k的寻找最长前缀后缀
反正我也讲不明白qwq
神犇传送门从头到尾彻底理解KMP
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define N 100005
int next[N];
char a[N],b[N];
int main(){
scanf("%s%s",a,b);
int j=0,k=-1,la=strlen(a),lb=strlen(b);
next[0]=-1;
while(j<lb-1){
if(k==-1||b[j]==b[k]){
++j,++k;
next[j]=k;
}
else k=next[k];
}
j=0,k=0;
while(j<la&&k<lb){
if(k==-1||a[j]==b[k])
k++,j++;
else k=next[k];
}
if(k==lb) printf("%d",j-k+1);
else printf("-1");
return 0;
}