美文网首页
字符串匹配

字符串匹配

作者: _1633_ | 来源:发表于2021-02-01 23:45 被阅读0次

indexOf  底层就是使用字符串匹配算法

字符串匹配算法很多

BF( Brute Force)算法

    暴力匹配算法,也叫朴素匹配算法,从名字上看出这个算法很暴力,当然它也很好理解,但是性能不高。

    BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。

    用一句话来概括,那就是,我们在主串(比如在字符串A中查找字符串B,那字符串A就是主串,字符串B就是模式串)中,检查起始位置分别是0、1、2…n-m且长度为m的n-m+1个子串,看有没有跟模式串匹配的。

    每次都比对m个字符,要比对n-m+1次,总共要进行 m*(n-m+1)次比较,所以,这种算法的最坏情况时间复杂度是O(n*m)。

    虽然这钟算法的时间复杂度很高,但是在开发中经常使用到,原因有2:

        1.在开发中,主串的和模式串的长度并不会太长,所以 O(n*m) 的时间复杂度并不会太大;

        2. BF 算法比较简单,不易出错。


RK (Rabin-Karp)算法

        它是以 两位发明者的名字命名的算法,它是 BK 算法的升级。

        我们知道 BK 算法的时间复杂度是 O(n*m),RK 算法对 BK 算法稍加改造,引入 哈希算法,我们通过哈希算法对主串中的n-m+1个子串分别求哈希值,然后逐个与模式串的哈希值比较大小。如果某个子串的哈希值与模式串相等,那就说明对应的子串和模式串匹配了(这里先不考虑哈希冲突的问题)。因为哈希值是一个数字,数字之间比较是否相等是非常快速的,所以模式串和子串比较的效率就提高了。

        但是在求解主串中的每个字串的哈希值的时候,我们需要遍历子串的每个字符,尽管模式串 和 子串 比较的效率提高了,但是算法整体效率并没有提高。此时,我们需要将我们哈希算法尽可能地设计地更有技巧一点。


BM(Boyer-Moore)算法

    BM 算法比较复杂,它包括两部分,分别是 坏字符规则(bad character rule) 好后缀规则(good suffix shift)

    坏字符规则(bad character rule)


KMP (Knuth Morris Pratt)算法

    它是以 三位发明者的名字命名的算法,KMP 算法 的本质上 和 BF 算法 是一样的,但是在过程中,优化了很多不必要的比较。

    在 BF 算法中,我们采用暴力的枚举方法,将所有的 子串 都和  模式串 做了比较,但是这个过程中其实有很多非必要比较的,比如

相关文章

  • 大数据算法系列9:字符串匹配问题,海量字符串处理

    一. 字符串匹配 1.1 字符串匹配 字符串匹配:字符串匹配在实际工作中经常遇到,但是我们经常使用的是编程语言自带...

  • Python算法-字符串(String)

    字符串匹配问题字符串匹配(String Matching):又称为模式匹配(Pattern Matching)。可...

  • 正则表达式

    匹配位置: \b:单词的开头或者结束,单词的分界处^:匹配字符串的开始$:匹配字符串的结束 匹配字符 .:匹配除换...

  • iOS 字符串

    1、字符串的截取 2、匹配字符串 从字符串(sd是sfsfsAdfsdf)中查找(匹配)字符串(Ad) 3、字符串...

  • 字符串匹配

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

  • 正则表达式

    基础语法 元字符^ 匹配行或者字符串的起始位置$ 匹配行或者字符串的结束位置\s 匹配空格\d 匹配数字\w 匹配...

  • iOS 字符串截取、iOS 字符串替换、iOS 字符串分隔、iO

    iOS之字符串截取、iOS 字符串替换、iOS字符串分隔、iOS之字符串匹配、截取字符串、匹配字符串、分隔字符串 ...

  • 正则表达式

    元字符 ^ 匹配字符串的开始$ 匹配字符串的结束. 匹配除换行符以外的任意字符\w 匹配字母或数字或...

  • R学习笔记(7):使用stringr处理字符串(2)

    目标:结合正则表达式,实现 确定与某种模式匹配的字符串找出匹配位置提取匹配内容替换匹配内容基于匹配拆分字符串 1....

  • django 使用nginx 配置静态文件

    1.Nginx location匹配规则 = /uri/ ——字符串精确匹配^~ /uri/ ——字符串前缀匹...

网友评论

      本文标题:字符串匹配

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