BoyerMoore 算法

本文介绍了一种高效的字符串匹配算法——BoyerMoore算法,并提供了详细的Java代码实现。通过预处理模式串并利用坏字符规则和好后缀规则,BoyerMoore算法能够快速跳过不匹配的部分,从而显著提高搜索效率。

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

主题思想: 写一个用于字符串匹配的BoyerMoore 算法,KMP 算法,我现在不会,但是这个算法,好写,且容易理解。我来徒手写下。

public class BoyerMoore{
    private String pat;
    private int[] right;
    public BoyerMoore(String pat){
        this.pat=pat;
        int M=pat.length();
        int R=256;
        right=new int[R];
        for(int c=0;c<R;c++)
            right[c]=-1;
        for(int j=0;j<M;j++)
            right[pat.charAt(j)]=j;
    }
    public int search(String txt){
        int N=txt.length();
        int M=pat.length();
        int skip;
        for(int i=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 N;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值