前段時間寫的有些倉促,**有些錯誤,這次修改了以下,並新增了一些適當的注釋,理解起來要容易一些
演算法描述:
主串s和模式串t在匹配過程中如果出現不匹配的情況,不需要改變主串的索引i,只需將模式串向右滑動,改變模式串索引j,然後繼續比較s[i]和t[j],直到完全匹配或者不匹配(即主串遍歷結束時,模式串仍未匹配完成)
主要**:
intindex_kmp(
char*s,
char
t,int
*next)
//kmp
else
//主串與模式串出現不匹配情況,模式串向右滑動j=
next[j];}if
(t[j]=='
\0')
//匹配成功
returni-
t[0];
//返回主串與模式串開始匹配的位置
return-1
;
//匹配失敗,返回-1
}int
*get_next(
char
*t)
//根據模式串確定next陣列
else
//t[next[i]]!=t[i]時,又是乙個模式匹配問題,令j=next[j],繼續比較t[j]和t[i]j=
next[j];
}return
next;
//返回next指標
}
擴充套件KMP演算法小記
參考來自 拓展kmp演算法總結 擴充套件kmp解決的問題 定義母串s和子串t,s的長度為n,t的長度為m 求 字串t 與 字串s的每乙個字尾 的最長公共字首 也就是說,設有extend陣列 extend i 表示t與s i,n 1 的最長公共字首,要求出所有extend i 0 i 注意到,如果存在...
演算法 KMP演算法
kmp演算法主要解決的問題就是在字串 主串 中的模式 pattern 定位問題。記主串為t,模式串為p,則kmp演算法就是返回p在t 現的具體位置,如果沒有出現則返回 1。如果 i 指標指向的字元和 j 指標指向的字元不一致,那麼把 i 右移1位,j 從0位開始,從新開始匹配 如果 i 指標指向的字...
kmp演算法next例題 KMP演算法next陣列求解
kmp演算法與bf演算法的比較 bf演算法的想法十分樸素,即先將子串t的第一位與主串s的第一位對齊開始匹配,當不能匹配時將子串整體往後移一位,然後重新匹配,以此類推直至排出結果 如當遇到下圖所示情況時,需將子串整體後移一位,將i,j分別回溯到主串第2位和子串第一位。kmp演算法 對bf進行思考後,我...