package 其他题目;
import java.util.Scanner;
public class KMP字符串搜索算法 {
static String str;
static String all;
static int [] next;
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=0;i<100;i++){
System.out.print(i%10);
}
System.out.println();
/*
ABCDABCDABDABCDABCDABDD
ABCDABD
*/
Scanner sc =new Scanner(System.in);
all =sc.nextLine();
str =sc.nextLine();
next=getNext(str);
for(int i=0;i<next.length;i++){
System.out.print(next[i]);
}
System.out.println();
find(0,0);
}
public static int find(int i,int j){
if(j==str.length()){
System.out.println("find:"+(i-j));//寻找的所有匹配满足 所以 如果只招第一个,自己看着改下就好
return find(i,next[j-1]);
}
if(i==all.length()){
return -1;
}
if(all.charAt(i)==str.charAt(j)){
return find(i+1,j+1);
}else if(j!=0){
return find(i,next[j-1]);
}else{
return find(i+1,0);
}
}
public static int [] getNext(String str){
int [] next =new int[str.length()];
next[0]=-1;
next[1]=0;
for(int i=2;i<next.length;i++){
next[i]=str.charAt(i)==str.charAt(next[i-1])?next[i-1]+1:0;
}
return next;
}
}
KMP字符串搜索算法 JAVA实现代码
原文作者:KMP算法
原文地址: https://blog.csdn.net/qq_36610426/article/details/80227470
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/qq_36610426/article/details/80227470
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。