目录
前言
这两个算法,尤其是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++;