串的朴素算法和KMP模式匹配算法

串的朴素算法和KMP模式匹配算法

 

串的朴素算法

(BF算法又称暴力搜索):首先待匹配串与模式串首先左对齐,然后从左向右开始逐个进行匹配,如果出现失配情况,则从待匹配串下一个字符开始进行匹配,直到模式串匹配成功。

 

例如:

        待匹配串:a b d a b c a b

        模式串  :a b c

 

 

开始进行匹配:

扫描二维码关注公众号,回复: 4073810 查看本文章

 

 

 

BF算法代码:

 

 

 

 

 

 

串的KMP模式匹配算法

核心思想为利用模式串自身的特点,若出现失配情况,则让模式串返回适当的位置,待匹配串不进行移动,若是一味的让模式串返回头部,则很可能会进行很多没有价值的运算,浪费了之前运算得到的反馈信息。

 

 

例如:

        待匹配串:a b c a b c a b d a b

        模式串  :a b c a b d

 

此时,我们可以发现,我们从模式串中可以发现,第一位的a肯定不等于第二位的b以及第三位的c,而我们在(1)已经得出了两者前五位是相等的,所以我们(2)(3)是没有必有的,肯定不会匹配成功。

这时我们可以让第六位出现失配情况时,直接让模式串指向第三位的c和待匹配串的第六位的c进行匹配,成功利用(1)得到的反馈信息,避免(2)(3)的无效计算。

 

核心思想:模式串返回的适当位置通过调用函数输出为一个数组next。

 

 

KMP算法代码:

猜你喜欢

转载自blog.csdn.net/IT_Quanwudi/article/details/83795802