KMP字符串匹配
import java.util.*; public class Main{ public static void main(String[] args) { String s1="BBCABCDABABCDABCDABD"; String s2="ABCDABD"; int[] next=getNext(s2); int i=0; int j=0; int len1=s1.length(); int len2=s2.length(); while(i<len1 && j<len2){ if(s1.charAt(i)==s2.charAt(j)){ i++; j++; }else if(next[j]==-1){ i++; }else{ j=next[j]; } } if(j==len2){ System.out.println(i-len2); }else{ System.out.println("false"); } } public static int[] getNext(String s){ int len=s.length(); int[] res=new int[len]; for(int i=1;i<len;i++){ if(s.charAt(i)==s.charAt(res[i-1])){ res[i]=res[i-1]+1; } } for(int i=len-1;i>0;i--){ res[i]=res[i-1]; } res[0]=-1; return res; } }