字串匹配BF RK BM KMP演算法

2021-10-09 09:35:51 字數 817 閱讀 3604

主串長度m,匹配串(模式串)長度n。

強制演算法比較,最容易想到的,時間複雜度o(m*n)

計算出匹配串的雜湊值,遍歷主串,求每次對應位置相同長度的子串雜湊值,比較兩者是否相同。

若不相同,則肯定不匹配,主串調至下一位。若相同,由於雜湊可能碰撞,還需逐個字元比較。

時間複雜度o(m)

①,模式串與主串左對齊,從後向前比較,發現主串 t與模式串g不相等。再從模式串中此位置開始向前找到字元t位置。

②,模式串字元t位置和主串t位置對齊後,再從後向前匹配,發現直到主串a和模式串g不匹配,在從模式串中此位置開始向前找到字元a位置。

③、模式串a位置和主串a位置對齊,再從後向前便利是否匹配。發現全部匹配則找到。

public static int kmp(string str, string pattern) 

if(pattern.charat(j)==str.charat(i))

if(j == pattern.length())

}return -1;

}// 生成next陣列

private static int getnexts(string pattern)

if(pattern.charat(i-1)==pattern.charat(j))

next[i]=j;

}return next;

}

時間複雜度o(m+n),空間複雜度o(n)

字串匹配經典算

最近在刷資料結構,看到了字串匹配演算法kmp,bm,kp等,感覺是面試中應該要會的知識點,就先記錄下來了,方便之後的複習檢視 1.kmp演算法 kmp演算法是在暴力演算法之上做了一些改進,不會重複的比對當前比對失敗的字首,即利用了匹配串本身的資訊來構造乙個查詢表next,該錶能夠指導當次匹配失敗下,...

字串匹配

題目描述 讀入資料string 然後讀入乙個短字串。要求查詢string 中和短字串的所有匹配,輸出行號 匹配字串。匹配時不區分大小寫,並且可以有乙個用中括號表示的模式匹配。如 aa 123 bb 就是說aa1bb aa2bb aa3bb都算匹配。輸入 輸入有多組資料。每組資料第一行輸入n 1 n ...

字串匹配

time limit 1000ms memory limit 65536k 給定兩個字串string1和string2,判斷string2是否為string1的子串。輸入包含多組資料,每組測試資料報含兩行,第一行代表string1,第二行代表string2,string1和string2中保證不出現...