【算法】蛮力法——串匹配问题(BF算法)

本文深入讲解了BF算法的基本思想和实现过程,通过实例演示了如何在主串中查找子串的位置,为理解更复杂的串匹配算法如KMP和BM算法奠定了基础。

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

一般在解决串匹配的问题的时候,一般都是使用BF算法、KMP算法和BM算法。今天就来讲讲什么是BF算法。

#BF算法:

##基本思想:
1.从主串S的第一个字符开始和模式T的第一个字符进行比较;  
2.若相等,则继续比较两者的后续字符;  
3.若不相等,则从主串S的第二个字符开始和模式T的第一个字符进行比较;  
4.重复上述过程,若T中的字符全部比较完毕,则说明本趟匹配成功;  
5.若最后一轮匹配的起始位置是n-m+2,则主串S中剩下的字符不足够匹配整个模式T,匹配失败(n:主串长度,m:子串长度)

##定义:  
BF(Brute-Force)算法,是我们常用的做传匹配的算法,即在一个主串s里面查找一个子串s在t里的位置。这个算法称为朴素的模式匹配算法,简称BF算法。

###例子:
主串s=“ababcabcacbab”   
子串t=“abcac”

第一趟 ababcabcacbab    
                  abcac

第二趟 abbabcabcacbab    
             abcac

第三趟 ababcabcacbab    
                      abcac

第四趟 ababcabcacbab    
                        abcac

第五趟 ababcabcacbab    
                          abcac

第六趟 ababcabcacabcacbab    
                           abcac

###算法如下:

    public static int bruteforce(String s,String t){
        int s1 = s.length();//目标字符串的长度
        int s2 = t.length();//模式串的长度

        for(int i=0;i<s1-s2;i++){
            int j=0;
            while((j < s2) && (s.charAt(i+j) == t.charAt(j))){
                j++;
            }
            if(j == s2){
                return i;
            }
        }

        return -1;
    }

总结: 
这是一个比较简单的蛮力法,但是由例子可以看出来有很多步骤我们是可以跳过的。这就引申到了优化的问题~也就是KMP或者是BM算法了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值