字符串匹配基础(上):如何借助哈希算法实现高效字符串匹配?

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------

字符串匹配这样一个功能,我想对于任何一个开发工程师来说,应该都不会陌生。我们用的最多的就是编程语言提供的字符串查找函数,比如Java中的 indexOf(),Python 中的find()函数等,它们底层就是依赖接下来要讲的字符串匹配算法。

字符串匹配算法很多,我会分四节来讲。今天讲两种比较简单的、好理解的,它们分别是:BF算法和RK算法。下一节我会讲比较难理解的、但更加高效的,它们是BM算法和KMP算法。

这两节讲的都是单模式匹配算法,也就是一个串跟一个串进行匹配。第三节、第四节,我会讲两种多模式匹配算法,也就是在一个串中同时查找多个串,它分分别是Trie树和AC自动机。

今天讲的两个算法中,RK算法是BF算法的改进,它巧妙借助了我们前面讲过的哈希算法,让匹配的效率有了很大的提升。那RK算法是如何借助哈希算法来实现高效字符串匹配的呢?你可以带着这个问题,来学习今天的内容。

BF算法

BF算法中的BF是Brute Force的缩写,中文叫作暴力匹配算法,也叫相互匹配算法。从名字可以看出,这种算法的字符串匹配方式很“暴力”,当然也就 会比较简单、好懂,但相应的性能也不高。

在开始讲这个算法之前,我先定义两个概念,方便我后面讲解。它们分别是主串模式串。这两个概念很好理解,我举个例子你就懂了。

比方说,我们在字符串A中查找字符串B,字符B就是械串。我们把主串的长度记作 n,模式串长度记作 m。因为我们是在主串中查找模式串,所以 n > m 。

作为最简单、最暴力的字符串匹配算法,BF算法思想可以用一句话来概括,那就是,**我们在主串中,检查起始位置分别是0、1、2…n-m且长度为 m 的 n-m+1个子串,看有没有跟模式串匹配的。**看下图你就明白了。
在这里插入图片描述

从上面的算法思想和例子,我们可以看出,在极端情况下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值