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


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

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

相关推荐
2601_954526753 分钟前
【硬核长文】从卡门涡街物理方程到边缘网关温压补偿算法:工业蒸汽测控实战,深度解密靠谱的涡街流量计厂家有哪些
算法
吞下星星的少年·-·18 分钟前
牛客技能树:区间翻转
算法·滑动窗口
tkevinjd1 小时前
力扣148-排序链表
算法·leetcode·链表
qeen872 小时前
【C++】vector的模拟实现详解(二)
c++·学习·算法·迭代器·stl
沉迷学习 日益消瘦3 小时前
4 净资产趋势可视化:SVG 图表 + 手势交互 + 降采样算法
算法·交互
可编程芯片开发14 小时前
基于MATLAB的PEF湍流风场生成器模拟与仿真
算法
罗西的思考15 小时前
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (9)--- Reward Judging
人工智能·算法·机器学习
Mr.HeBoYan16 小时前
一次持续三天才出现的丢包故障——深入解析 DPDK Memory Ordering、rte_ring 与 CPU Memory Barrier (下)
linux·网络·算法·架构·dpdk
wabs66617 小时前
关于图论【深度优先搜索的理论基础】
算法·深度优先·图论
先吃饱再说17 小时前
LeetCode 101. 对称二叉树
算法