看KMP算法真的比看毛片还累
/*
* Copyright (c) 2017
*安徽大学计算机科学与技术学院
* All rights reserved.
*/
#include<cstdio>
#include<string>
#include<iostream>
#define maxn 1001
int next[maxn];
using namespace std;
int KMP(string a,string b){
int n=a.length();
int m=b.length();
int j=0,flag=0;
a=" "+a;
b=" "+b;
for(int i=2;i<=m;i++){
while(j>0&&b[j+1]!=b[i])
j=next[j];
if(b[j+1]==b[i])j++;
next[i]=j;
}
j=0;
for(int i=1;i<=n;i++){
while(j>0&&b[j+1]!=a[i])
j=next[j];
if(b[j+1]==a[i])j++;
if(j==m){
flag=i-m+1;
break;
}
}
if(flag)
cout<<b<<" 第一次出现在"<<a<<" 的第"<<flag<<"个位置"<<endl;
else
cout<<b<<"不是"<<a<<"的子串"<<endl;
}
int main(){
int n;
string a,b;
cin>>n;
while(n--){
cin>>a>>b;
KMP(a,b);
}
return 0;
}