源代码入下:
import java.util.Scanner;
class KMP {
static int num=0;
private static int[] getNext(String pattern){
int j=0,k=-1;
int[]next=new int[pattern.length()];
next[0]=-1;
while(j
if(k==-1||pattern.charAt(j)==pattern.charAt(k))
{
j++;
k++;
if(pattern.charAt(j)!=pattern.charAt(k))
next[j]=k;
else
next[j]=next[k];
}
else k=next[k];
return next;
}
public static void indexOf(String target,String pattern){
if(target!=null&&pattern!=null&&pattern.length()>0&&target.length()>pattern.length())
{
int []next=getNext(pattern);
int i=0,j=0;
while(i
if(j==-1||target.charAt(i)==pattern.charAt(j)){
i++;j++;
}
else
j=next[j];
if(j==pattern.length()){
num++;
j=next[1];
}
}
}
else
System.out.println("no");
}
public static void main(String args[]){
Scanner in=new Scanner(System.in);
String s=in.nextLine();
int n=Integer.valueOf(s);
while(n>0){
String pattern=in.nextLine();
String target=in.nextLine();
indexOf(target,pattern);
System.out.println(num);
num=0;
n--;
}
in.close();
}
}