BM

public class BoyerMoore {
    private static int search(String txt,String pat){
        int[] right=new int[256];
        final int N=txt.length();
        final int M=pat.length();
        
        for(int i=0;i<right.length;i++){
            right[i]=-1;
        }
        for(int i=0;i<M;i++){
            right[pat.charAt(i)]=i;
        }
        
        for(int i=0,skip=0;i<=N-M;i+=skip){
            skip=0;
            for(int j=M-1;j>=0;j--){
                if(txt.charAt(i+j)!=pat.charAt(j)){
                    skip=j-right[txt.charAt(i+j)];
                    if(skip<1) skip=1;
                    break;
                }
            }
            if(skip==0) return i;
        }
        return -1;
    }
    
    public static void main(String[] args){
        
        String txt="aaawe24reterg";
        String pat="awe";
        System.out.println(search(txt, pat));
    }
}
原文地址:https://www.cnblogs.com/wqkant/p/6888925.html