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


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

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

  • 相关阅读:
    基于SpringBoot的图书商城系统
    SV-线程的使用与控制
    [深入研究4G/5G/6G专题-46]: 5G Link Adaption链路自适应-2-常见缩略语
    springmvc有哪几种请求参数的方式呢?
    Vue3+ts(day07:pinia)
    appium入门
    VB从资源文件中播放wav音乐文件
    Redis LRU缓存淘汰算法
    2022全国大学生数学建模A题的思路与解法
    如何让ChatGPT生成Midjourney提示词
  • 原文地址:https://blog.csdn.net/WHabc2002/article/details/133621900