利用編輯距離的子串模糊匹配 python實現

2021-06-14 23:21:28 字數 1096 閱讀 5551

編輯距離是模糊字串匹配領域廣為人知的一項技術。經過一些改動,編輯距離同樣可以用於子串的模糊匹配。

例子:子串:「abc」

匹配物件:「c abba c」

右下角的5就是兩個字串之間的編輯距離。這是從「aba」到「c aba c」你需要修改的次數。但是,我們可以看到由子串「abba」變為「aba」只需要一步。

為了得到子串的模糊匹配,我們將第一行設定為0。這表示我們不在乎匹配開始前在匹配物件中跳過的步數。

在最後一行,我們選取的不是右下角的數值,而是該行的最小值,這表示我們不在乎匹配結束後在匹配物件中跳過的步數。

我們選取最後一行的最小值,所以在此例中為1,這正是我們應該得到的值。

以下是這個演算法的python實現:

def fuzzy_substring(needle, haystack):

"""calculates the fuzzy match of needle inhaystack,

using a modified version of the levenshtein distance

algorithm.

the function is modified from the levenshtein function

in the bktree module by adam hupp"""

m, n = len(needle), len(haystack)

# base cases

if m == 1:

return not needle in haystack

if not n:

return m

row1 = [0] * (n+1)

for i in range(0,m):

row2 = [i+1]

for j in range(0,n):

cost = ( needle[i] != haystack[j] )

子串模糊匹配

從字串string開始完整匹配子串sub,返回匹配到的字元個數。sub中如果出現 表示可以匹配一到三個除 0 以外的任意字元。如果sub還有找不到匹配的字元,則說明不能完整匹配。如果能完整匹配,返回匹配到的字元個數,如果有多種匹配方式,返回匹配字元數最少的那個,如果不能完整匹配,返回 1 輸入描述 ...

深信服2019春招筆試 子串模糊匹配

從字串string開始完整匹配子串sub,返回匹配到的字元個數。sub中如果出現 表示可以匹配一到三個除 0 以外的任意字元。如果sub還有找不到匹配的字元,則說明不能完整匹配。如果能完整匹配,返回匹配到的字元個數,如果有多種匹配方式,返回匹配字元數最少的那個,如果不能完整匹配,返回 1 輸入描述 ...

字串的編輯距離

題目 對於乙個字串a可以通過增加乙個字元 刪除乙個字元 修改乙個字元,將字串a變成字串b,例如 a abcddefg b abcefg 可以通過a字串刪除兩個dd得到b字串,也可以通過b字串增加dd程式設計a字串,從上面的分析可以知道,增加和刪除的代價必須是相同的,這樣a字串變成b字串的代價和b字串...