package Four;
import java.util.Scanner;
public class NumberKmp {
static int[] nextTable = new int[1000];
static int[] pattern = new int[1000];
static int[] text = new int[10000];
public static void getNextTable(int m){
int j =0;
nextTable[j] = -1;
int i = nextTable[j];
while(j<m){
if(i==-1||pattern[j]==pattern[i]){
i++;
j++;
nextTable[j] = i;
}else{
i = nextTable[i];
}
}
return;
}
public static int KMP(int n,int m){
getNextTable(m);
int i=0;
int j=0;
while(i<n&&j<m){
if(j==-1||text[i]==pattern[j]){
i++;
j++;
}else{
j=nextTable[j];
}
}
if(j==m){
return i-j+1;
}else{
return -1;
}
}
public static void main(String[] args) {
int caseNumber;
Scanner scan = new Scanner(System.in);
System.out.print("caseNumber = ");
caseNumber = scan.nextInt();
while((caseNumber--)>0){
int n,m;
System.out.print("n= ");
n = scan.nextInt();
System.out.print("m= ");
m = scan.nextInt();
System.out.print("为text[]数组赋值:");
for(int i =0;i<n;i++){
text[i] = scan.nextInt();
}
System.out.print("为patter[]数组赋值:");
for(int j =0;j<m;j++){
pattern[j] = scan.nextInt();
}
System.out.println(KMP(n,m));
}
}
}
