BF算法详解(JAVA语言实现)

目录

BF算法的介绍

图解

 JAVA语言实现

BF算法的时间复杂度


BF算法的介绍

BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。

如果可以在S中寻找到T,我们返回的是相匹配字符串中第一个字符在S串里的下标索引值;如果找不到,我们通常设置为返回-1。 


 

图解

BF算法详解(JAVA语言实现)_第1张图片

我们用i来遍历S, j来遍历T
则实现过程如下:

(1)i=0,j=0

BF算法详解(JAVA语言实现)_第2张图片

aabcda

da

匹配失败,则 j 赋值 0 ,i 赋值 i - j + 1 = 1

(2)i=1,j=0

aabcda

  da

匹配失败,则 j 赋值 0 ,i 赋值 i - j + 1 = 2

(3)i=2,j=0和i=3,j=0同理 匹配失败

(4)i=4,j=0

BF算法详解(JAVA语言实现)_第3张图片

aabcda

        da

匹配成功,则 i++,j++

(5)i=5,j=1

BF算法详解(JAVA语言实现)_第4张图片 

aabcda

        da

匹配成功,返回的是相匹配字符串中第一个字符在S串里的下标索引值,4


 

 JAVA语言实现

public class BF {
    public static int bf(String str,String sub){
        if(str==null||sub==null){
            return -1;
        }
        int strlen=str.length();
        int sublen=sub.length();
        if(strlen==0||sublen==0){
            return -1;
        }
        int i=0,j=0;
        while (i=sublen){
            return i-j;
        }
        return -1;
    }
}

测试:

public static void main(String[] args) {
        System.out.println(bf("aabcda","da"));
    }

结果:4


BF算法的时间复杂度

(1)最理想的情况下  该算法的时间复杂度为O(n)  其中n为T串的长度,即一次遍历就在S中找到了T

(2)最坏的情况下  该算法的时间复杂度为O(n*m)  其中 m 和 n
分别为 S 和 T 的长度,即前面每次匹配都不成功,直至到 S 的最后一个字符才与之匹配。


 

以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

BF算法详解(JAVA语言实现)_第5张图片

你可能感兴趣的:(算法)