Python活力練習Day 23

4375 ワード

Day 23:2文字列間の編集距離を求める
eg:input :str1 = "intention"str2 = "execution"
  output : 5
#詳細はリンクを参照https://www.cnblogs.com/xiaodangdang/p/12165303.html
 1 def string_distance(str1, str2):
 2     """
 3                   
 4     @author: 
 5     @date: 
 6     :param str1:
 7     :param str2:
 8     :return:
 9     """
10     m = len(str1)
11     n = len(str2)
12     distance = np.zeros((m + 1, n + 1))
13 
14     for i in range(0, m + 1):
15         distance[i, 0] = i
16     for i in range(0, n + 1):
17         distance[0, i] = i
18 
19     for i in range(1, m + 1):
20         for j in range(1, n + 1):
21             if str1[i - 1] == str2[j - 1]:
22                 cost = 0
23             else:
24                 cost = 1
25             distance[i, j] = min(distance[i - 1, j] + 1, distance[i, j - 1] + 1,
26                                  distance[i - 1, j - 1] + cost)  #
27 
28     return distance[m, n]
29 
30 
31 if __name__ == '__main__':
32     str1 = "intention"
33     str2 = "execution"
34     result = string_distance(str1, str2)
35     print(result)

出力結果:5