字符串模式匹配——Brute-Force暴力查找算法以及KMP算法具象图解,超级详细!!

目录

前言

1. 串的模式匹配算法

目的

1.1 Brute-Force算法

图解Brute-force算法

Brute-force暴力查找算法的弊端

1.2 KMP算法

next数组

1.2.1 Getnext——求next数组的函数

图解Getnext函数

Getnext函数总结

1.2.2 KMP模式匹配操作

KMP匹配过程图解

KMP算法总结

结束语:


前言

这两个算法,尤其是KMP算法,可以说是让许多算法小白头痛的了。如果你也十分困惑,这两个算法怎么实现查找的,那么看我的这篇文章就对了!

这两个算法基于串这一个数据结构哦!想学习串的基本操作,可以去看我写的相关文章喔!😆

传送门基于C语言的数据结构之串——带你熟练掌握串的基本操作!!超级详细!!-优快云博客

1. 串的模式匹配算法

!!重中之重!!串结构里最难的就是它。我这就教会你!它也是串的操作里的一种,但是因为太重要了(太长了),直接给他单独拿出来讲。

(模式串就是需要查找的串。打个比方,模式串是悬赏令里的通缉犯,模式匹配算法就是在主串里根据悬赏令找通缉犯的操作(更多专属名词可以点击上面的传送门进行学习)。)

目的

串的模式匹配算法的目的是:①若模式串为主串的子串,则返回模式串在主串中首次出现时首字符在主串的位置;②反之,就返回-1。

比如主串是abcdefg,模式串1是cdef,就返回2;模式串2是aaaa,就返回-1。

若主串是aabbaa,模式串是aa,返回的是0,而不是返回4。

1.1 Brute-Force算法

也就是暴力查找,从前往后地毯式地查找。

​
//Brute—Force算法(暴力查找)
int BFIndex(DSqString str, DSqString str_mode, int start)//start为开始查找位置
{
    int i = start, j = 0, v = -1;//v用来存储查找子串的结果,并在最后作为返回值返回
    while (i < str.Length && j < str_mode.Length)//对主串和子串的索引都不超范围前提下
    {
        if (str.Str[i] == str_mode.Str[j])//一个个字符匹配,相同就往下继续匹配
        {
            j++;
 
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值