1.演算法的應用
存在兩個不等長的字串,判斷短的字串是否長的字串的字串,如果是返回子串的首個字元的下標;如果否,則返回0.
注:長字串的第一元素為字元的長度。
2.演算法的關鍵:求next陣列
t為長字串
(1).[next陣列]: 當模式匹配串t失敗的時候,next陣列對應的元素指導用t串的哪個元素進行下一輪的匹配;
(2).字首:t[i],為固定的;
(3).字尾:t[j],為相對的,當前匹配元素的前乙個;
(4).匹配原則:
當t[i]==t[j]時,i++,j++,next[i]數值等於j;
不同,就j要回溯到next[j]的值開始;
(5)優化
如果發生失配時,字尾與前面的一致,退回到字首對應的next[i]對應的值;
**實現
void getnext(string t,int *next)
else
} if(j>t[0]) return i-t[0];
else return 0;
}
KMP演算法學習
先貼上一點 等腦子清醒點再好好理解 求next陣列 public static int getnext string pattern else else return next public static int search string src,string pattern,int nextva...
KMP演算法學習
一 什麼是kmp演算法 knuth morris pratt 字串查詢演算法 常簡稱為 kmp演算法 是在乙個 主文字字串 s內查詢乙個 詞 w的出現,通過觀察發現,在不匹配 發生的時候這個詞自身包含足夠的資訊來確定下乙個匹配將在 開始 以此避免對以前匹配過的字元重新檢查。在原串中匹配模式串 二 k...
KMP演算法學習
1.kmp演算法簡介 2.樸素的匹配演算法 在介紹kmp演算法之前我們來看看那樸素的匹配演算法。定義 我們是在主串中搜尋模式串。如下圖當主串在e的位置與模式串發生失配時 e前面的都是匹配的 樸素的匹配演算法做的是,將模式串後移一位在去匹。我們可以思考這樣做是否有意義,因為模式串c前面是與主串匹配的,...