目录
前言
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语言的数据结构之串——带你熟练掌握串的基本操作!!超级详细!!-CSDN博客
!!重中之重!!串结构里最难的就是它。我这就教会你!它也是串的操作里的一种,但是因为太重要了(太长了),直接给他单独拿出来讲。
(模式串就是需要查找的串。打个比方,模式串是悬赏令里的通缉犯,模式匹配算法就是在主串里根据悬赏令找通缉犯的操作(更多专属名词可以点击上面的传送门进行学习)。)
串的模式匹配算法的目的是:①若模式串为主串的子串,则返回模式串在主串中首次出现时,首字符在主串的位置;②反之,就返回-1。
比如主串是abcdefg,模式串1是cdef,就返回2;模式串2是aaaa,就返回-1。
若主串是aabbaa,模式串是aa,返回的是0,而不是返回4。
也就是暴力查找,从前往后地毯式地查找。
//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++;