首先要對模式串進行預處理。
預處理過程就是計算出指定位置的字首和字尾的最大相同的長度(啊啊啊啊。。估計只有我乙個人能看懂)
這個文章說得很清楚
比如說 :
a a a c b c a a a
0 1 2 0 0 0 1 2 3
**:
void getnext(int next, char par[20],int n)//翻譯自演算法導論
}
主函式:
void kmp(char next, char text,char pat, int len,int m)
if (text[i] == pat[k + 1])
if (k == m)
}}
字串匹配 KMP
參考 從頭到尾徹底理解kmp 在字串 str 中 匹配模式串 pattern 1.計算模式串的 next 陣列 2.在字串中匹配模式串 當乙個字元匹配時,str i pattern k 繼續匹配下乙個字元 當當前字元不匹配時,根據 next 陣列移動模式字串,k next k next 陣列 描述模...
KMP字串匹配
判斷s中是否含有字串t。一般思路為 從s中首字元開始,依次與t中進行比對,直到t結尾或者某乙個位置兩者不同 如果到t的結尾,則表示s中含有t。如果有乙個位置不相同,那麼從s中下乙個字元開始,再次與t中字元比對。如下 i 0,j 0 for i len 這樣的比較,每一次遇到不同的時候都需要從t串的第...
字串匹配 KMP
include include include using namespace std const intmaxn 10005 intf maxn void getf1 string p 可判斷週期及迴圈數 f i 1 p i p j j 1 0 for int i 1 i p.size i cou...