學習知乎大牛 筆記![在這裡插入描述](
**把握住 i和j指向的是啥就好接受了,i指向的next陣列的下標 只能遞增,j指向i所指字元之前的字串的最大交集字首末尾+1的下標
也就是說 只有if裡面的成立了 才執行next的新賦值。
else 語句是:
當串不能在上一最大交集串的基礎上增加時(也就是p[i]!=p[j]),檢查最大交集字首字串裡next值
此處next[3]等於1,j=next[j],j的值成為1,指向串的最大前字尾交集的字首的尾。
一定記得j指向的是什麼?next[j]指的又是什麼?
1、給j和i和next[i]賦初值
2、只要next陣列沒有計算完成進行以下步驟
3、j == -1(判斷開始?)或者p[i] ==p[j](主串的字首尾與字尾尾是否一致?)
4、若一致賦值next[i] = j; j指向字串最大字首後乙個字串,同時也代表字首字尾交集的最大長度。
5、若不滿足3條件,則代表字首字尾交集沒法增加了,所以就縮短字首。。。。。此處又卡住了。。。。。。如圖1,顯然字尾尾與字首尾不一致,需要縮短長度,那麼縮短長度為多少呢?
需要看字首next值了,也就是abab 不行,就找aba的前字尾交集
發現此時j指向了b,一樣j指向的公共交集的字首尾字元a,在字尾就有一樣的字元a,
然後判斷 ab 是否 匹配 ac
亂七八糟 ,,,一定要感受那個中庸的思想,太極生兩儀,兩儀生四象,四象生八卦。。。
主串分前字尾。。前或字尾再分前或字尾。。。
Kmp演算法學習筆記
kmp演算法我認為難點在next陣列的建立。看kmp前我仔細看了下傳統的匹配模式,為 首元素存放串的長度 int index sstring s,sstring t else i i j 2 if j t 0 return i t 0 else return 0 我認為想深刻理解好kmp演算法要和傳...
KMP演算法學習筆記
kmp是一種字串匹配演算法,網上有許多的講解和介紹,都非常清楚明白,這裡只說明一點next i 表示 1,i 1 位中的最長公共字首字尾,因此在遇到字元不匹配時,直接將字串右移j next j 位即可。不多說了,直接上習題 poj 3461 oulipo kmp演算法裸題,直接上模板 code in...
KMP演算法學習筆記
前幾天學習了關於字串處理的kmp演算法,剛學的時候沒怎麼懂,通過今天的練題,終於把kmp掌握了。kmp演算法利用了字串的一些特殊性質,通過字首陣列,將單個字串的匹配問題由o m n 優化到了o m n 這裡,我存幾段關鍵性 首先是get next 函式 void get next 然後是kmp vo...