字串匹配問題 KMP匹配演算法

2021-10-23 09:18:35 字數 754 閱讀 4615

基本思想

字串匹配問題:在文字串中尋找是否有與模式串相同的子串

在字串匹配時,暴力匹配忽略了如果模式串開頭與中間有重複部分,在將模式串的後面的重複部分匹配後,無法繼續匹配的話,此時將模式串開頭實際上也已經被匹配了,可以直接從開頭重複部分之後開始匹配

這裡引入了乙個部分匹配值表,每個與模式串的字元對應,表示與開頭的字元有沒有相同的,如果有,表的值就是相同字元的下一位,但只從開頭開始對應

這樣就使用了匹配失敗的結果,從而減少了匹配次數

演算法實現

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區域是匹配的,所以...