KMP模式匹配演算法

2021-09-05 07:54:12 字數 855 閱讀 7621

先看一下 kmp 演算法執行流程(假設主串:ababcabcacbab,模式串:abcac)。

第一次匹配:

匹配失敗,i 指標不動,j = 1(字元『c』的next值);

第二次匹配:

相等,繼續,直到:

匹配失敗,i 不動,j = 2 ( j 指向的字元 『c』 的 next 值);

第三次匹配:

相等,i 和 j 後移,最終匹配成功。

使用普通演算法,需要匹配 6 次;而使用 kmp 演算法,則只匹配 3 次。

**如下

#include

#include

void

next

(char

*t,int

*next)

else}}

intkmp

(char

* s,

char

* t)

else}if

(j>

strlen

(t))

return-1

;}intmain()

模式匹配 KMP演算法

字串匹配演算法 include includeusing namespace std define ok 1 define error 0 define overflow 2 typedef int status define maxstrlen 255 使用者可在255以內定義最長串長 typed...

模式匹配KMP演算法

前些日子在為目前該學習什麼而苦惱,就問了一下已經從事多年軟體開發的表哥,他說乙個程式設計師要走的遠,就要學好資料結構和演算法,於是我就重新開始學習資料結構和演算法了 拿起以前上過的資料結構看,看到第四章串的模式匹配時,頗感興趣,就寫了一下程式,實踐了一下。感覺還蠻爽,於是就把以下幾個重要的函式放在此...

KMP模式匹配演算法

首先,這是由knuth morris和prattle三人設計的線性時間字串匹配演算法。這裡就不仔細的講解,網上有更好的講解,在這推薦幾個自己當時學習的kmp所看到的較好理解的 這裡附上自己所學的 includeusing namespace std s 是主串 p 是模式串 int next 100...