1. 程式人生 > >字符串匹配算法之kmp算法

字符串匹配算法之kmp算法

rri 前綴 最大 morris logs 情況 長度 ima -1

kmp算法是一種效率非常高的字符串匹配算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,所以簡稱KMP算法

算法思想

在一個字符串中查找另一個字符串時,會遇到如下圖的情況

技術分享

我們通常的做法是從第一個串A的下一位B再逐位比較,但這樣的做法非常低效。
仔細思考一下發現,第一個串已經匹配的部分就是第二個串的前綴。如果我們對第二個串進行一些預處理,或許就不用再去逐位比較了。

KMP算法就是預處理出要查找串每個前綴的最大相同前後綴的長度,通俗一點就是兩個相同的串在不重合情況下最大的重疊長度

如上圖中ABCDAB前綴的最大相同前後綴就是AB,長度為2

技術分享

這樣我們在D匹配不成功時,就可以直接將查找串貼到匹配成功部分的後綴與查找串前綴的最大相同部分上繼續匹配,如圖

技術分享

字符串匹配算法之kmp算法