KMP演算法小記

2022-02-19 04:49:40 字數 779 閱讀 3733

前段時間寫的有些倉促,**有些錯誤,這次修改了以下,並新增了一些適當的注釋,理解起來要容易一些

演算法描述:

主串s和模式串t在匹配過程中如果出現不匹配的情況,不需要改變主串的索引i,只需將模式串向右滑動,改變模式串索引j,然後繼續比較s[i]和t[j],直到完全匹配或者不匹配(即主串遍歷結束時,模式串仍未匹配完成)

主要**:

int

index_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進行思考後,我...