怎麼求串的模式值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 堆分配儲...