KMP匹配算法

          以前那个时候大二,想了几天都没有想明白,现在看看这个算法其实很简单。

          首先如果我们用最简单的方式去匹配字符串,用模式串与主串一个一个比较,如果匹配不上,那么我们要移动一个单位从头开始一个一个比较,直到匹配成功或者匹配玩所有的目的字符串。

         仔细观察会发现一个问题,其实有很多时候我们不一定每次只移动一个位置。但是我们怎么判断需要移动多少个单位呢?结果观察我们会发现,移动多少个单位其实是由模式串在第几个字符匹配失败所决定

 

现在我就先讲解怎么样实现KMP匹配算法:

(1)我们根据模式串算出所有的字符匹配失败所移动的位置数放入容器里,

(2)按照正常匹配方式匹配

(3)如果匹配成功就直接返回;如果匹配到主串结尾还没有匹配成功,直接结束;如果匹配失败,我们根据匹配失败的字符的位置去容器中的取值,根据取出来的值决定去滑动多少个单位。

(4)重复(2)(3)

 

上面的算法步骤其实都很简单,难点就是我们怎么根据模式串算出字符匹配失败移动的位置?(希望你仔细观察发现规律)

 

文字不好描述,有时间画图表示。

 

 

 

 

 

 

你可能感兴趣的:(KMP匹配算法,常用算法)