码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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语言实现

    1. public class BF {
    2. public static int bf(String str,String sub){
    3. if(str==null||sub==null){
    4. return -1;
    5. }
    6. int strlen=str.length();
    7. int sublen=sub.length();
    8. if(strlen==0||sublen==0){
    9. return -1;
    10. }
    11. int i=0,j=0;
    12. while (i
    13. if(str.charAt(i)==sub.charAt(j)){
    14. i++;
    15. j++;
    16. }else {
    17. i=i-j+1;
    18. j=0;
    19. }
    20. }
    21. if(j>=sublen){
    22. return i-j;
    23. }
    24. return -1;
    25. }
    26. }

    测试:

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

    结果:4


    BF算法的时间复杂度

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

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


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

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

  • 相关阅读:
    Qt开发技术:Q3D图表开发笔记(一):Q3DScatter三维散点图介绍、Demo以及代码详解
    U2-Net——U-Net中套U-Net,套娃式的分割模型
    Kafka与Spark案例实践
    Python 3.6.10 中的 requests 库 TLS 1.2 强制使用问题及解决方案
    【计算机基础】操作系统一览
    【MyBatis笔记01】MyBatis框架介绍以及开发环境搭建
    Centos8界面语言怎么设置? Centos用户界面语言的设置方法
    AI在玩一种很新的艺术,700万网友在线围观,ControlNet又立功了
    `英语` 2022/8/18
    I - Bob vs ATM(博弈论)
  • 原文地址:https://blog.csdn.net/WHabc2002/article/details/133621900
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号