当前位置:编程学习 > JAVA >>

[KMP]串匹配-java代码

串匹配算法大家都不陌生,其中kmp算法算是比较经典的一种算法,然而kmp算法的精髓就是寻找next[ ]数组。

主要是对匹配串的next[ ]一个求解。

 

 

[java]  
package qyq.Algorithm.KMP; 
/**
 * KMP串匹配
 * @author qi
 * @creation 2012-8-14
 */ 
public class Kmp { 
 
    public static void main(String[] args) { 
        String S="abcdthabc"; 
        String T="bcdmmn"; 
        int lenS=S.length(); 
        int lenT=T.length(); 
        int next[]=new int[lenT+1]; 
         
        getNext(T, next);//next[]数组的求解 
        for(int i=0;i<next.length;i++){//打印出next数组 
            System.err.println(next[i]); 
        } 
        int kmp=K_next(S, T, lenS, lenT, next); 
        System.err.println("第一次匹配的位置::"+kmp); 
    } 
     
    public  static void getNext(String T,int next[]){ 
        int j=1,k=0; 
        next[1]=0; 
        while(j<T.length()){ 
            if(k==0||T.charAt(j)==T.charAt(k)){ 
                j++; 
                k++; 
                next[j]=k; 
            }else { 
                k=next[k]; 
            } 
        } 
    } 
 
    public static int K_next(String S,String T,int lenS,int lenT,int next[]){ 
        int i=0,j=0; 
        while(i<lenS&&j<lenT){ 
            if(j==0||S.charAt(i)==T.charAt(j)){ 
                i++; 
                j++; 
            }else { 
                j=next[j]; 
            }    
        } 
        if(j==lenT){ 
            return i-lenT; 
        } 
        return -1; 
    } 


作者;qitian0008
补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,