單模式字串匹配演算法KMP

2022-08-31 11:51:08 字數 930 閱讀 6272

kmp演算法:

2int

kmp(

char

*s, file

*file,

int*

pos)  

/**/3

else

/*否則,下標指向當前字元的前乙個匹配項

*/12i =

next[i];

13if

(i ==-1

)  17}18

if(s[i] =='

\0')else

/*否則返回-1

*/22

return-1

;23}獲得模式串的next陣列演算法:(演算法中c1代表檔案中正在與s進行匹配的字元)

next[i]值的含義要求一下兩個條件:

條件①:存在j,滿足max;

條件②:在滿足條件①情況下,若s[i+1]!=s[j+1],則next[i+1]=j;若s[i+1]=s[j+1],則next[i+1]=next[j+1];

1void

get_next(

char

*s,

intnext)2的,

14                                  所以與s[i]不匹配的外來字元c1和與s[j]不匹配的外來字元c2,會被回退到同乙個匹配下標,故next[i]=next[j]

15                                  ②若j=0,有s[i]=s[0],則同上情況的解釋,next[i]=next[0]=-1

*/16

next[i]

=next[j]        17}

else

/*對應3行if語句不成立情況,

*/18j =

next[j];                19}

20}^_^

kmp 字串的單模匹配

當有一段已知足夠長的字串t以及一段相對而言較小的字串p,而問題是要讓你統計p在t中出現的次數或者位置等這類匹配的問題。由於樸素匹配的時間複雜度不足以解決該問題時,可以嘗試用kmp匹配演算法。我們發現樸素匹配演算法之所以複雜度高,是因為做了許多不必要的回溯查詢,而這些回溯過程,如果有存在迴圈節,則直接...

字串模式匹配KMP演算法

next的值去改變每次匹配的位置 注意 字串的儲存最好用字元陣列,然後用字元輸入的形式,保證正確!利用求模式串的next值來分析遍歷,可以在不改變主串i的值的基礎上,只改變next j 的下標來遍歷 next j include include using namespace std void ge...

字串模式匹配KMP演算法

字串模式匹配指的是,找出特定的模式串在乙個較長的字串中出現的位置。很直觀的可以寫出下面的 來找出模式串在乙個長字串中出現的位置。1 2 樸素的模式匹配演算法 3 功能 字串的模式匹配 4 引數 5 s 目標串 6 p 模式串 7 pos 開發匹配的位置 8 返回值 9 匹配成功,返回模式串在目標串的...