package Four;
import java.util.Scanner;
/***
* 字符型的kmp算法
* @author bai
* 描述:
* 给你一个文本串,再给你一个模式串,
* 文本串中有多少个子串的模式串完全匹配
*/
public class StringKmp {
static int[] nextTable = new int[10000];
public static void getNextTable(String pattern){
char[] patt = pattern.toCharArray();
int m = patt.length;
int j =0;
nextTable[j] = -1;
int i = nextTable[j];
while(j<m){
if(i==-1||patt[j]==patt[i]){
i++;
j++;
nextTable[j]= i;
}else{
i = nextTable[i];
}
}
return;
}
public static int KMP(String text,String pattern){
getNextTable(pattern);
char[] t = text.toCharArray();
int n = t.length;
char[] p = pattern.toCharArray();
int m = p.length;
int i = 0;
int j = 0;
int number = 0;
while(i<n){
if(j==-1||t[i]==p[j]){
i++;
j++;
}else{
j = nextTable[j];
}
if(j==m){
number++;
j=nextTable[j];
}
}
return number;
}
public static void main(String[] args) {
int caseNumber;
Scanner scan = new Scanner(System.in);
System.out.print("caseNumber: ");
caseNumber = scan.nextInt();
while((caseNumber--)>0){
System.out.println("text:");
String text = scan.next();
System.out.println("pattern:");
String pattern = scan.next();
System.out.println(KMP(text,pattern));
}
}
}

来源:CSDN
作者:gldbys
链接:https://blog.csdn.net/gldbys/article/details/104671756