字串匹配問題描述:設有兩個字串a和b,a字串長度為n,b字串長度為m,現在要確定b字串是否出現在a字串中,如果是,返回位置,如果不是返回結果為false,在這裡,我們成字串b為模式字串,a為主串。
最近經常會被問到字串匹配的問題,實際上這些問題在網上都有很多資源,我覺得沒有必要自己寫乙個,但是看了之後可能過段時間又不是很清楚了,因此在這裡做個記錄,記錄那些讓我感覺講得比較清楚的主頁。
1. kmp演算法
kmp演算法是o(m+n)的演算法,kmp演算法的思想很簡單,那就是要利用之間比較的結果,其中有貪心演算法和回溯演算法的影子。此演算法需要對模式字串b進行預處理,得到乙個長度與b相同的partial陣列(the partial match table)2. bm演算法
3.brute force
蠻力演算法,適合比較小規模的字串匹配4.rabin-karp
rk方法的設計思想也是利用前面已經獲得的資訊,該演算法的思想是,通過對模式字串進行hash運算,同時對源字串取長度跟模式字串相等的子字串也進行hash運算,最後比較hash值來確定模式字串是否和源字串的子串匹配,並獲得其匹配起始位置。問題的關鍵就在於hash演算法的設計,這個鏈結裡面是個比較易懂的描述。以上四種方法基本上概括了主流的字串匹配演算法,借用robert sedgewick 的algorithm 一書中的一幅圖總結一下,
擴充套件:字尾樹/字尾陣列
老實說,字尾樹v_july_v也講過,不過個人覺得字串處理過程總字尾陣列才是個神器,而且也能夠解決字串匹配的問題,時間複雜度為o(m+logn)老實說,這都不太適合作為一篇博文發出,但是我今天看了的這些東西也不能夠浪費,權且給下次看留點資源吧,等過段時間閒下來,我想寫個字串處理的專題,加油!!
字串匹配經典算
最近在刷資料結構,看到了字串匹配演算法kmp,bm,kp等,感覺是面試中應該要會的知識點,就先記錄下來了,方便之後的複習檢視 1.kmp演算法 kmp演算法是在暴力演算法之上做了一些改進,不會重複的比對當前比對失敗的字首,即利用了匹配串本身的資訊來構造乙個查詢表next,該錶能夠指導當次匹配失敗下,...
字串匹配問題
在字串匹配問題中,我們期待察看串t中是否含有串p。其中串t被稱為目標串,串s被稱為模式串。進行字串匹配,最簡單的乙個想法是 public class match 可以看見,這個演算法 假定m n 的複雜度是o mn 其中m是t的長度,n是p的長度。這種演算法的缺陷是匹配過程中帶有回溯 準確地說是t串...
字串匹配問題
給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母的大寫和小寫看作相同的字元。輸入輸入的第一行包含乙個字串s,由大小寫英文本母組成。第二行包含乙個數字,表示大小寫敏感的選項,當...