KMP算法 Java实现

本文深入讲解了KMP算法的工作原理及实现过程,并提供了一个具体的Java实现案例,通过该案例可以清晰地了解如何利用KMP算法进行字符串匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KMP算法匹配字符串

public class KMP {
   static  void getNextArray(char pattern[],int next[],int n){
        next[0]=0;
        int len=0;
        int i=1;
        while(i<n){
           if(pattern[i]==pattern[len]){
               len++;
               next[i]=len;
               i++;
           }else{
               if(len>0)
                   len=next[len-1];
               else{
                   next[i]=0;
                   i++;
               }
           }
        }
    }
    static  void moveNextArray(int next[],int n){
        int i;
        for( i=n-1;i>0;i--){
            next[i]=next[i-1];
        }
        next[0]=-1;
    }
    static void KMP(char []T,char []pattern){
        int n=pattern.length;
        int next[]=new int [n];
        getNextArray(pattern,next,n);
        moveNextArray(next,n);
        int i=0,j=0;
        while(i<T.length){
            if(j==n-1&&T[i]==pattern[j]){
                int pos=i-j;
                System.out.println("Found pattern at"+" "+pos);
                j=next[j];
            }
            if(T[i]==pattern[j]){
                i++;j++;
            }else{
                j=next[j];
                if (j == -1) {
                    i++;j++;
                }
            }
        }
    }
    public static void main(String []args){
        String s1="ABABABCABAABABABAB";
        String s2="ABABCABAA";
        KMP(s1.toCharArray(),s2.toCharArray());
    }
}

 

转载于:https://www.cnblogs.com/codeLZC/p/10561794.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值