'''
兩個字串的編輯距離
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...