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 匹配成功,返回模式串在目標串的...