【题目链接】
【算法】
KMP
【代码】
#include<bits/stdc++.h>
using namespace std;
#define MAXA 1000010
#define MAXB 1010
int i,j,lenA,lenB;
int p[MAXB];
char SA[MAXA],SB[MAXB];
int main() {
scanf("%s",SA+1); lenA = strlen(SA+1);
scanf("%s",SB+1); lenB = strlen(SB+1);
p[1] = 0;
for (i = 2; i <= lenB; i++) {
j = p[i-1];
while ((j > 0) && (SB[i] != SB[j+1])) j = p[j];
if (SB[i] == SB[j+1]) p[i] = j + 1;
else p[i] = 0;
}
j = 0;
for (i = 1; i <= lenA; i++) {
while ((j > 0) && (SA[i] != SB[j+1])) j = p[j];
if (SA[i] == SB[j+1]) j++;
if (j == lenB) {
cout<< i - lenB + 1 << ' ' << i << endl;
exit(0);
}
}
cout<< "NO" << endl;
return 0;
}