字串的編輯距離 Python

2021-08-28 03:07:43 字數 1373 閱讀 9338

'''

兩個字串的編輯距離

edit[i][j]表示a串從第0個字元開始到第i個字元和b串從第0個字元開始到第j個字元,這兩個字串的編輯距離。

字串的下標從1開始。

遞推公式:

'michaelab' 變成 'michaelxy'

if b==y:

d[i][j] = d[i-1][j-1]

if b!=y:

新增:michaelaby michaelxy d[i][j] = 1 + d[i][j-1]

刪除:michaela michaelxy d[i][j] = 1 + d[i-1][j]

替換:michaelay michaelxy d[i][j] = flag + d[i-1][j-1](就是最後乙個字元相等不需要操作,不等就得+1了)

初始矩陣:

d[0][j] 就是j, d[i][0]就是i

'''def eidt_1(s1, s2):

# 矩陣的下標得多乙個

len_str1 = len(s1) + 1

len_str2 = len(s2) + 1

# 初始化了一半 剩下一半在下面初始化

matrix = [[0] * (len_str2) for i in range(len_str1)]

for i in range(len_str1):

for j in range(len_str2):

if i == 0 and j == 0:

matrix[i][j] = 0

# 初始化矩陣

elif i == 0 and j > 0:

matrix[0][j] = j

elif i > 0 and j == 0:

matrix[i][0] = i

# flag

elif s1[i - 1] == s2[j - 1]:

matrix[i][j] = min(matrix[i - 1][j - 1], matrix[i][j - 1] + 1, matrix[i - 1][j] + 1)

else:

matrix[i][j] = min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1)

return matrix[len_str1 - 1][len_str2 - 1]

if __name__ == '__main__':

s1 = 'cfe'

s2 = 'coffe'

res = eidt_1(s1, s2)

print(res)

結果:

2

編輯字串距離

題目 題意 編輯距離,又稱levenshtein距離 也叫做edit distance 是指兩個字串之間,由乙個轉成另 乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪 除乙個字元。例如將kitten轉化成sitting sitten k s sittin ...

字串編輯距離

題目描述 給定乙個源串和目標串,能夠對源串進行如下操作 在給定位置上插入乙個字元 替換任意字元 刪除任意字元 寫乙個程式,返回最小運算元,使得對源串進行這些操作後等於目標串,源串和目標串的長度都小於2000。關於字串最短編輯距離的解題思路 給定相關資料的定義 mep i j 表示源字串source ...

字串編輯距離

給出兩個單詞word1和word2,寫乙個函式計算出將word1 轉換為word2的最少操作次數。你總共三種操作方法 1 插入乙個字元 2 刪除乙個字元 3 替換乙個字元 格式 輸入行輸入兩個字串 word1 和 word2,最後輸出將 word1 轉換為 word2的最少操作次數 樣例輸入 wor...