程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

計算字符串的編輯距離(python)

編輯:Python

Levenshtein 距離,又稱編輯距離,指的是兩個字符串之間,由一個轉換
成另一個所需要的最少操作次數,許可的編輯操作包括將一個字符替換成另一個字符,
插入一個字符,刪除一個字符,編輯距離的算法是首先由俄國科學家Levanshtein 提出的
故又叫Levenshtein Distance。
例如:
字符串A : abcdefg
字符串B : abcdef
通過增加或是刪掉字符“g” 的方式達到目的,這兩種方案都需要一次操作。把這個操作
所需要的次數定義為兩個字符串的距離。
要求: 給定任意連個字符串,寫出一個算法計算它們的編輯距離。
數據范圍: 給定的字符串長度滿足1<= len(str) <= 10000
輸入描述:
每組用例一共2行,為輸入的兩個字符串
輸出描述:
每組用例輸出一行,代表字符串的距離
示例:
輸入: abcdefg
abcdef
輸出: 1

  • 這是一道動態規劃的題,規律 就是
  • 1、某一點 處 string_a 和string_b 的位置相等,改點處的編輯距離是dp[row -1][col-1]
  • 2、如果不相等則等於相鄰三個點的中最小的加+1
  • 填完表後,srring_a 到string_b 的編輯距離就是dp[n][m]
    填表如下圖:

    代碼如下:
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()

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved