Levenshtein 距離,又稱編輯距離,指的是兩個字符串之間,由一個轉換
成另一個所需要的最少操作次數,許可的編輯操作包括將一個字符替換成另一個字符,
插入一個字符,刪除一個字符,編輯距離的算法是首先由俄國科學家Levanshtein 提出的
故又叫Levenshtein Distance。
例如:
字符串A : abcdefg
字符串B : abcdef
通過增加或是刪掉字符“g” 的方式達到目的,這兩種方案都需要一次操作。把這個操作
所需要的次數定義為兩個字符串的距離。
要求: 給定任意連個字符串,寫出一個算法計算它們的編輯距離。
數據范圍: 給定的字符串長度滿足1<= len(str) <= 10000
輸入描述:
每組用例一共2行,為輸入的兩個字符串
輸出描述:
每組用例輸出一行,代表字符串的距離
示例:
輸入: abcdefg
abcdef
輸出: 1
def edit_distance():
"""編輯距離"""
string_a = input()
string_b = input()
m = len(string_a)
n = len(string_b)
dp = [[0 for _ in range(m + 1)] for _ in range(n + 1)]
# 從空位置變到string_a每個位置的距離
for col in range(m + 1):
dp[0][col] = col
# 從空位置變到string_b 每個位置的距離
for row in range(n + 1):
dp[row][0] = row
# 填表
for row in range(1, n+1):
for col in range(1, m+1):
if string_a[col-1] != string_b[row-1]:
dp[row][col] = min(dp[row - 1][col], dp[row - 1][col-1], dp[row][col-1]) + 1
else:
dp[row][col] = dp[row-1][col-1]
print(dp[n][m])
if __name__ == '__main__':
edit_distance()