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

目录

BF算法的介绍

图解

JAVA语言实现

BF算法的时间复杂度


BF算法的介绍

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

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


图解

我们用i来遍历S, j来遍历T

则实现过程如下:

(1)i=0,j=0

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

aabcda

da

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

(5)i=5,j=1

aabcda

da

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


JAVA语言实现

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<strlen&&j<sublen){
            if(str.charAt(i)==sub.charAt(j)){
                i++;
                j++;
            }else {
                i=i-j+1;
                j=0;
            }
        }
        if(j>=sublen){
            return i-j;
        }
        return -1;
    }
}

测试:

java 复制代码
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 的最后一个字符才与之匹配。


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

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

相关推荐
技术专家26 分钟前
Stable Diffusion系列的详细讨论 / Detailed Discussion of the Stable Diffusion Series
人工智能·python·算法·推荐算法·1024程序员节
csdn_aspnet1 小时前
C# (QuickSort using Random Pivoting)使用随机枢轴的快速排序
数据结构·算法·c#·排序算法
鹿角片ljp1 小时前
最长回文子串(LeetCode 5)详解
算法·leetcode·职场和发展
paeamecium3 小时前
【PAT甲级真题】- Cars on Campus (30)
数据结构·c++·算法·pat考试·pat
chh5633 小时前
C++--模版初阶
c语言·开发语言·c++·学习·算法
RTC老炮4 小时前
带宽估计算法(gcc++)架构设计及优化
网络·算法·webrtc
dsyyyyy11014 小时前
计数孤岛(DFS和BFS解决)
算法·深度优先·宽度优先
会编程的土豆5 小时前
01背包与完全背包详解
开发语言·数据结构·c++·算法
汀、人工智能5 小时前
[特殊字符] 第86课:最大正方形
数据结构·算法·数据库架构·图论·bfs·最大正方形
hetao17338375 小时前
2026-04-12~14 hetao1733837 的刷题记录
c++·算法