#include <bits/stdc++.h>
using namespace std;
const int N = 1000000 + 10;
int t, n, m;
int la, lb;
char a[N], b[N];
int nex[N];
void get_nex(){
int i = 0, j = -1;
nex[0] = -1;
while(i < lb){
if(j == -1 || b[i] == b[j]){
i++, j++;
nex[i] = j;
}
else j = nex[j];
}
}
int kmp(){
get_nex();
int i = 0, j = 0;
while(i < la){
if(j == -1 || a[i] == b[j]){
i++, j++;
}
else j = nex[j];
if(j == m) return i - m; ///继续匹配 j = 0;
}
return -1;
}
int main(){
scanf("%d", &t);
while(t--){
scanf("%s%s", a, b);
la = strlen(a);
lb = strlen(b);
printf("%d\n", kmp());
}
}
个人模板 KMP
最新推荐文章于 2019-10-09 09:59:43 发布