美文网首页On lzq ways
字符串匹配算法

字符串匹配算法

作者: zhengqiuliu | 来源:发表于2019-05-23 10:06 被阅读194次

场景:字符串A为主串,字符串B为模式串,比较字符串B是否能够在字符串A中进行匹配?

匹配算法:BF算法和RK算法。

BF算法:(Brute Force)暴力匹配算法也叫朴素匹配算法,A为主串,B为字串。假定A字符串长度为n,B字符串长度为m,遍历A字符串从开始位置每次取m个字符的子串,字串数目= n - m + 1。然后比较字串与B是否一样,如果相同则结束。

BF算法时间复杂度 = 遍历的时间复杂度 * 比较的时间复杂度 = O(n - m + 1) * O(m) = O(m * n)

即可知BF算法优缺点:算法简单易懂,代码实现容易维护,对于字符串较短的场景基本都满足要求。但是如果字符串长度较长,这种算法的耗时就会急剧增加。

实际例子,java.lang.String.indexOf()代码如下:

RK算法:Rabin和Karp人名进行命名。BF算法有一个耗时点是子串进行比较时需要一个个字符进行比较,时间复杂度为O(m)。RK算法是先计算好 n - m + 1个子串的哈希值,然后比较子串和目标串的哈希值,由于都是整数只需要比较大小即可时间复杂度为O(1)。所以RK算法的耗时主要是哈希算法的耗时,计算n-m+1个子串的哈希值的时间复杂度=O(n)

前面讲过好的哈希算法需要满足:1,散列冲突较少。2,散列函数的计算效率较高。

常见的哈希算法如设计 (a-z)26个字母的哈希算法。a-z分别对应十进制0-25

bbcd = 1 * 26^3 + 1 * 26 ^2 + 2 * 26 + 3。这就保证了不同的字符串哈希值肯定不同。如果字符串长度过长会导致整数溢出的场景,可能需要对哈希算法再进行设计。保证在不溢出的情况下,尽量减少哈希冲突。如果出现字符串不同,哈希值一样的情况,可以先获取哈希值相同的子串然后再比较子串与目标串是否完全一致。

相关文章

  • 字符串匹配

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

  • KMP字符串匹配算法

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

  • KMP算法文章合集

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

  • 一些有关算法的

    字符串模式匹配算法 字符串的KMP算法详解部分匹配表(即)向右移一位就可以得到next数组。字符串模式匹配算法 R...

  • 字符串匹配算法

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

  • 字符串匹配算法

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

  • 2022-01-25

    1.字符串匹配BM算法 在文本中查找字符串匹配算法,坏字符串规则和好后缀规则坏字符串规则: 从后往前匹配,第一个不...

  • 20-字符串匹配

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

  • leetcode字符串匹配算法之KMP算法

    本篇介绍一种高效的字符串匹配算法——KMP算法。 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J....

  • 中文分词的方法

    1、基于字符串匹配的方法 1.1 正向最大匹配分词算法1.2 逆向最大匹配分词算法1.3 双向最大匹配分词算法1....

网友评论

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

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