字串搜尋
字串搜尋是一種非常常見的應用,暴力搜尋是直接去匹配各個字元,但是這種方法對於重複度較高的字串來說,有點浪費計算了。KMP演算法利用子串本身的特性,試圖建立一種狀態機,指出匹配到當前字串的狀態如何。http://blog.csdn.net/thesby/article/details/51243270
Next陣列怎麼求?
next陣列的求解方法是:第一位的next值為0,第二位的next值為1,後面求解每一位的next值時,根據前一位進行比較。首先將前一位與其next值對應的內容進行比較,如果相等,則該位的next值就是前一位的next值加上1;如果不等,向前繼續尋找next值對應的內容來與前一位進行比較,直到找到某個位上內容的next值對應的內容與前一位相等為止,則這個位對應的值加上1即為需求的next值;如果找到第一位都沒有找到與前一位相等的內容,那麼需求的位上的next值即為1。
這樣的描述好像不太容易理解,我們可以直接看一個例子。
1 2 3 4 5 6 7 8
a b a a b c a c
所以,第一步的next
1 2 3 4 5 6 7 8
a b a a b c a c
0 1
第二步,看第三位的前一個是b,它與自己next位置1的字元a比較,不相等,所以他就是1了。
接下來,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1
第三步,看第三個字元a,可見它與自己next對應的是相等的,那就是在此基礎上+1,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2
第四步,第四個字元的a和它對應的next位置2的b不等,所以它就是再和2位置b的next比較,此時相等了,那麼就是2了,所以
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2
第五步,第五個字元b和自己對應next字元相等,所以+1,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2 3
第六步,第六個字元c沒有與前面的重複,所以第七個位置的next就是1,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2 3 1
最後一個,看第七個是a,它對應next位置字元剛好和它相等,所以第八個next就是2了,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2 3 1 2
相關文章
- 使用grep搜尋多個字串字串
- [CareerCup] 18.8 Search String 搜尋字串字串
- 【譯】Swift演算法俱樂部-暴力字串搜尋Swift演算法字串
- [leetcode 87 擾亂字串] [剪枝搜尋]LeetCode字串
- 解決jive搜尋結果中的中文搜尋字串高亮度顯示的方法字串
- 十九種Elasticsearch字串搜尋方式終極介紹Elasticsearch字串
- HDU 5469 Antonidas(樹上的字串匹配/搜尋)字串匹配
- 海量資料搜尋---搜尋引擎
- Trie——解決字串搜尋、異或最值問題字串
- [譯] Swift 演算法學院 – Z-Algorithm 字串搜尋Swift演算法Go字串
- [PY3]——字串的分割、匹配、搜尋方法總結字串
- [譯] Swift 演算法學院 - Z-Algorithm 字串搜尋Swift演算法Go字串
- 搜尋檔案下包含某個字串的檔案字串
- 搜尋
- 搜尋引擎-03-搜尋引擎原理
- [譯] Swift 演算法學院 - KMP 字串搜尋演算法Swift演算法KMP字串
- 轉:一個在文字檔案搜尋指定字串的程式字串
- SQL資料庫全域性搜尋字串(key&value)/無需執行查詢語句/不漏搜任何字串SQL資料庫字串
- 搜尋引擎es-分詞與搜尋分詞
- elasticsearch搜尋Elasticsearch
- vim搜尋
- 搜尋策略
- Linux (三劍客之一) grep字串搜尋命令詳解Linux字串
- Elasticsearch(ES)的高階搜尋(DSL搜尋)(上篇)Elasticsearch
- Elasticsearch(ES)的高階搜尋(DSL搜尋)(下篇)Elasticsearch
- 谷歌搜尋用上BERT,10%搜尋結果將改善谷歌
- 直播開發app,實時搜尋、搜尋引擎框APP
- 泛企業搜尋PK網際網路搜尋
- 計算機演算法:Morris-Pratt字串搜尋演算法計算機演算法字串
- 掌握CFML:在輸出緩衝區中高效搜尋字串的技巧字串
- Elasticsearch——全文搜尋Elasticsearch
- Elasticsearch 向量搜尋Elasticsearch
- elasticsearch搜尋商品Elasticsearch
- Elasticsearch常用搜尋Elasticsearch
- jQuery 模糊搜尋jQuery
- Google搜尋大法Go
- Google搜尋API?GoAPI
- Google搜尋技巧Go