編輯距離是模糊字串匹配領域廣為人知的一項技術。經過一些改動,編輯距離同樣可以用於子串的模糊匹配。
例子:子串:「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字串...