KMP字元匹配

2021-08-08 07:01:13 字數 866 閱讀 1611

在kmp 中,主要是尋找模式字串的字首和字尾的最長的共有元素的長度。

以」abcdabd」為例,

- 「a」的字首和字尾都為空集,共有元素的長度為0;

- 「ab」的字首為[a],字尾為[b],共有元素的長度為0;

- 「abc」的字首為[a, ab],字尾為[bc, c],共有元素的長度0;

- 「abcd」的字首為[a, ab, abc],字尾為[bcd, cd, d],共有元素的長度為0;

- 「abcda」的字首為[a, ab, abc, abcd],字尾為[bcda, cda, da, a],共有元素為」a」,長度為1;

- 「abcdab」的字首為[a, ab, abc, abcd, abcda],字尾為[bcdab, cdab, dab, ab, b],共有元素為」ab」,長度為2;

- 「abcdabd」的字首為[a, ab, abc, abcd, abcda, abcdab],字尾為[bcdabd, cdabd, dabd, abd, bd, d],共有元素的長度為0。

在這裡先檢視一些定義和一些基本步驟

現假設最前面的k個字元和j之前的最後k個字元是一樣的。

圖1是給定的乙個pattern string

現有p[k]!=p[j],顯然字首「abac」和字尾「abab」已經不相等,但是退而求其次,往前回退,可以找到字首「ab」和字尾「ab」仍可以匹配上,如圖2,那麼現在k就成了next[k],j不移動。

KMP字元匹配

kmp 演算法是在 s中查詢子串 p,如果存在,返回這個子串的起始索引,否則返回空列表輸入 文字串s bbc abcdab abcdabcdabde 模式串p abcdabd 輸出 15 解釋 起始索引等於 15 長度為 7 的子串是 abcdabde s abcdabcdabd p abcdabd...

字元匹配kmp演算法

前言 之前對kmp演算法雖然了解它的原理,即求出p0 pi的最大相同前字尾長度k 但是問題在於如何求出這個最大前字尾長度呢?我覺得網上很多帖子都說的不是很清楚,總感覺沒有把那層紙戳破,後來翻看演算法導論,32章 字串匹配雖然講到 了對前1.kmp演算法的原理 本部分內容 字串匹配是計算機的基本任務之...

字元匹配 KMP演算法

problem description 給定兩個字串string1和string2,判斷string2是否為string1的子串。input 輸入包含多組資料,每組測試資料報含兩行,第一行代表string1 長度小於1000000 第二行代表string2 長度小於1000000 string1和s...