串的匹配算法:對主串的每一個字符作為開頭,作與要匹配的字符串的長度的小循環(huán),直到匹配成功或全部遍歷完為止。
KMP模式匹配算法:(就是一種在一個字符串中定位另一個串的高效算法。簡單匹配算法的時間復雜度為O(m*n);KMP匹配算法,可以證明它的時間復雜度為O(m+n)。)
具體方法為:若主串為S[m],子串為T[n],當第一次搜索到S[i],T[i]不等后,S下標不是回溯到1,T下標也不是回溯到開始,而是根據T中T[i]對應的next值在數值上所對應的下標位上的字符和S[i]再直接進行比較,如果相等,再在當前比較的下標數值基礎上數值加一,直至與T中最后一個字符相等為止。否則T回溯到開始,繼續(xù)和S[i+1]開始新一輪比較。
下邊說一下next數組值推導和nextval數組值推導方法
**
例子:
模式串: a b a a b c a c
next值 0 1 1 2 2 3 1 2
nextval值: 0 1 0 2 1 3 0 2
- Next數組值推導:
第一位的next值為0;第二位的next值為1;后邊各位對應的next值要看此位前面的子串情況,如果子串前后綴一個字符相等,k值為2,兩個字符相等,k值為3,n個相等k值為n+1;否則為1。
- Nextval數組值推導:
最簡單的方法就是,先把其對應的next值寫下來,第一位的nextval值為0;第二位的nextval值要看第二位對應的next值(僅僅只在數值上)所對應的位上的字符與當前位的字符進行比較,如果相同,則當前位的nextval和那個字符所在位對應的nextval一致,如果不同,則當前位的nextval值和當前位的next值相同;后邊各位對應的nextval值同第二位的原理。