美文网首页
算法—字符串匹配BF算法

算法—字符串匹配BF算法

作者: 土豆骑士 | 来源:发表于2020-04-27 15:59 被阅读0次

有一个主串S = {a, b, c, a, c, a, b, d, c}, 模式串T 式串在主串中第一次出现的位置;
提示: 不需要考虑字符串大小写问题, 字符均为小写字母。

BF算法-爆发匹配算法

匹配模拟图

思路:

  1. 分别利用计数指针i和j指示主串S和模式T中当前正待比较的字符位置,i初值为pos,j的初值为0;
  2. 如果2个串均为比较到串尾,即i和j均小于等于S和T的长度时, 则循环执行以下的操作:
  • S[i]和T[j]比较,若相等,则i 和 j分别指示串中下一个位置,继续比较后续的字符;
  • 若不相等,指针后退重新开始匹配. 从主串的下一个字符串(i = i - j + 1)起再重新和模式第一个字符(j = 0)比较;
  1. 如果j >= T.length, 说明模式T中的每个字符串依次和主串S找中的一个连续字符序列相等,则匹配成功,返回和模式T中第一个字符的字符在主串S中的序号(i-T.length);否则匹配失败,返回-1;

时间复杂度:O(n*m)

BF模拟1!
接下来开始主串S和 模式串T的index 回溯对比
BF模拟2,3,4,5,6
如此循环。
int Index_BF1(char *S, char *T,int pos) {
    
    if (S == NULL || T == NULL) {
        return -1;
    }
    
    int lenS = (int)strlen(S);
    int lenT = (int)strlen(T);
    
    if (lenT < 1 || lenS < 1 || lenS < lenT) {
        return -1;
    }
    
    int i = pos;//i用于主串S中当前位置下标值,若pos不为1,则从pos位置开始匹配
    int j = 0;
    
    while (i < lenS && j < lenT) {
        if (S[i] == T[j]) {
            I++;
            j++;
        } else {//不相等,则指针后退重新匹配
            i = i - j + 1;
            j = 0;
        }
    }
    if (j >= lenT) {//找到了匹配
        return i - lenT + 1;
    }
    return -1;
}

int main(int argc, const char * argv[]) {
    char *S = "abcdex";
    char *T = "bc";

    i = Index_BF1(S, T, -1);

    if (i == -1) {
       printf("没有找到匹配的模式串\n");
    } else {
        printf("匹配到了,从第i = %d个元素开始\n",i);
    }
    
    return 0;
}

BF算法效率分析:

案例图
碰到上图的案例,BF算法就会进行超多的判断操作,效率比较低下。
但BF算法能比较快速的解决算法问题,能够快速想到并完成。

相关文章

  • 字符串匹配

    indexOf 底层就是使用字符串匹配算法 字符串匹配算法很多 BF( Brute Force)算法 暴力匹配算...

  • 记录数据结构与算法的学习之路 -----005.BF算法与RK算

    1.BF算法 1.1 定义 BF算法,即暴风算法,也有人称为朴素算法、暴力算法。BF算法是一种做字符串匹配的算法。...

  • KMP算法文章合集

    字符串的查找:朴素查找算法和KMP算法 暴力匹配算法与KMP算法(串的匹配) 字符串查找算法BF和KMP 字符串匹...

  • 20-字符串匹配

    字符串匹配 这章节,我们会讲到几大典型的字符串匹配算法 BF算法 BF算法是最最符合正常人逻辑思维的一种匹配模式,...

  • KMP字符串匹配算法

    KMP字符串匹配算法 先总结一下之前的几种字符串匹配算法 1 BF算法, 最简单的字符串匹配算法, 可以直接使用s...

  • 数据结构与算法 -- 串,BF算法和RK算法

    BF算法 BF(Brute Force)算法,即暴力匹配算法 如果在字符串A中查找字符串B,那么字符串A就是主串,...

  • 字符串匹配基础上——BF 算法和 RK 算法

    单模式匹配算法,也就是一个字符串和另一个字符串进行匹配。 1. BF 算法 BF 算法中的 BF 是 Brute ...

  • 字符串匹配算法

    以下为学习 《数据结构与算法之美 -- 字符串匹配》 的记录。 BF算法 即暴力匹配算法,循环遍历匹配。 RK算法...

  • 字符串匹配算法--BF算法与RK算法

    BF算法 BF算法中的BF是brute force的缩写,中文叫做暴力匹配算法,也加朴素匹配算法。算法特点:“暴力...

  • 字符串匹配算法

    场景:字符串A为主串,字符串B为模式串,比较字符串B是否能够在字符串A中进行匹配? 匹配算法:BF算法和RK算法。...

网友评论

      本文标题:算法—字符串匹配BF算法

      本文链接:https://www.haomeiwen.com/subject/qhoywhtx.html