当前位置: 首页 > news >正文

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语言实现

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;}
}

测试:

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


 

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

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

http://www.lryc.cn/news/184320.html

相关文章:

  • 零基础转行网络工程师,过来人给的一些建议
  • Vue中如何进行分布式搜索与全文搜索(如Elasticsearch)
  • 数据结构-图-最小生成树问题
  • 使用vite+npm封装组件库并发布到npm仓库
  • 85.最大矩形
  • Windows服务器 开机自启动服务
  • 《算法通关之路》chapter17一些通用解题模板
  • 常用求解器安装
  • 第三章:最新版零基础学习 PYTHON 教程(第一节 - Python 运算符)
  • 细粒度特征提取和定位用于目标检测:PPCNN
  • 【STM32单片机】数学自动出题器设计
  • C语言之动态内存管理篇(1)
  • React18入门(第二篇)——React18+Ts项目配置husky、eslint、pretttier、commitLint
  • 【VINS】苹果手机采集单目相机+IMU数据离线运行VINS-Mono
  • 数据结构 2.1 单链表
  • [Machine Learning]pytorch手搓一个神经网络模型
  • KdMapper扩展实现之Dell(pcdsrvc_x64.pkms)
  • python和go相互调用的两种方法
  • c# 分部视图笔记
  • Vue3最佳实践 第七章 TypeScript 中
  • (三)行为模式:8、状态模式(State Pattern)(C++示例)
  • nginx的配置文件概述及简单demo(二)
  • Apollo Planning2.0决策规划算法代码详细解析 (2): vscode gdb单步调试环境搭建
  • flex 布局:元素/文字靠右
  • java基础-第1章-走进java世界
  • jvm 堆内存 栈内存 大小设置
  • 免杀对抗-反沙盒+反调试
  • QTimer类的使用方法
  • (三)行为模式:9、空对象模式(Null Object Pattern)(C++示例)
  • Django实战项目-学习任务系统-用户登录