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;
    }
    
}

 

 

 

posted @ 2018-03-16 17:26  xinyilovestudy  阅读(111)  评论(0编辑  收藏  举报