KMP演算法(具體求串的next n )

2021-09-07 05:35:38 字數 1082 閱讀 8676

怎麼求串的模式值next[n]

(1)next[0]= -1  意義:不論什麼串的第乙個字元的模式值規定為-1。

(2)next[j]= -1   意義:模式串t中下標為j的字元,假設與首字元

同樣,且j的前面的1—k個字元與開頭的1—k

個字元不等(或者相等但t[k]==t[j])(1≤k)。

如:t=」abcabcad」 則next[6]=-1,因t[3]=t[6]

(3)next[j]=k    意義:模式串t中下標為j的字元,假設j的前面k個

字元與開頭的k個字元相等,且t[j] != t[k] (1≤k)。

即t[0]t[1]t[2]。

。。t[k-1]==

t[j-k]t[j-k+1]t[j-k+2]…t[j-1]

且t[j] != t[k].(1≤k);

(4) next[j]=0   意義:除(1)(2)(3)的其它情況。

#include //#include void get_nextval(const char *t, int next )

else

k = next[k];

} // 這裡是我加的顯示部分

for(int i=0;icout<}

///int kmp(const char *text,const char* pattern)

int *next=new int[len+1];

get_nextval(pattern,next);//求pattern的next函式值

int index=0,i=0,j=0;

while(text[i]!='\0' && pattern[j]!='\0' )

else}}

delete next;

if(pattern[j]=='\0')

return index;// 匹配成功

else

return -1;

}int main()

KMP演算法 求最小覆蓋子串

kmp與最小覆蓋子串 最小覆蓋子串 對於某個字串s,它的最小覆蓋子串指的是長度最小的子串p,p滿足通過自身的多次連線得到q,最後能夠使s成為q的子串。比如 對於s abcab 它的最小覆蓋子串p abc 因為p通過在它後面再接上乙個p 即重疊0個字元 可以得到q abcabc 此時s是q的子串。對於...

KMP演算法 求最小覆蓋子串

kmp與最小覆蓋子串 最小覆蓋子串 對於某個字串s,它的最小覆蓋子串指的是長度最小的子串p,p滿足通過自身的多次連線得到q,最後能夠使s成為q的子串。比如 對於s abcab 它的最小覆蓋子串p abc 因為p通過在它後面再接上乙個p 即重疊0個字元 可以得到q abcabc 此時s是q的子串。對於...

串 KMP演算法

一 串 1 串是由 0個或者多個字元構成的有限序列 2 字典序 定義字串的大小也稱為字典序。1 若兩個串長度為 m,n。m n,則m 串大於n串 2 若m n 當兩串,第乙個不同的字元,哪個大的哪個串就大 二 串的儲存 1 順序儲存 定長儲存串,放在陣列中進行操作。當溢位了後會自動截斷 2 堆分配儲...