基本思想
字串匹配問題:在文字串中尋找是否有與模式串相同的子串
在字串匹配時,暴力匹配忽略了如果模式串開頭與中間有重複部分,在將模式串的後面的重複部分匹配後,無法繼續匹配的話,此時將模式串開頭實際上也已經被匹配了,可以直接從開頭重複部分之後開始匹配
這裡引入了乙個部分匹配值表,每個與模式串的字元對應,表示與開頭的字元有沒有相同的,如果有,表的值就是相同字元的下一位,但只從開頭開始對應
這樣就使用了匹配失敗的結果,從而減少了匹配次數
演算法實現
public
static
intkmpsearch
(string s1,string s2)
return-1
;}//獲取部分匹配值表
private
static
int[
]kmpnext
(string s)
return next;
}
測試
public
static
void
main
(string[
] args)
結果為
15
演算法是有效的
演算法分析
設s1有n個字元,s2有m個字元
字串匹配問題 KMP演算法
kmp演算法 kmp是解字串匹配這類題目的演算法,又稱 看毛片 演算法。如下圖,給定乙個長度為n的文字,給定乙個長度為m 的字串,求該字串在給定文字的中出現的次數。kmp就是解決這一類題目的。i 1 zzkzzzkzzzkzkkkz zzkzzkzzkzzk j 1繼續考慮上面的問題。首先我相信每個...
字串匹配問題 KMP演算法
字串匹配問題 給定兩個字串s 主串 和t 模式串 假設n strlen s strlen t m,判斷主串s中是否包含模式t,且返回t在s中所在的起始位置。這裡為簡單起見,若s包含t,則只返回第乙個t所在的位置。一般的蠻力法如下 蠻力法在遇到不匹配時,j每次都要回到t的起點,從新開始匹配,這樣來看效...
KMP演算法 字串匹配問題
給定倆個字串str和match,長度分別為n和m。實現乙個演算法,如果字串str中含有字串match,則返回match在str中的開始位置,不含有則返回 1 str acbc match bc 返回2.str acbc match bcc 返回 1.我們知道在match中a區域與b區域是匹配的,所以...