題目:
給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少操作數 。
你可以對一個單詞進行如下三種操作:
插入一個字符
刪除一個字符
替換一個字符
def minDistance(word1: str, word2: str) -> int:
wl1 = len(word1)+1
wl2 = len(word2)+1
dp = [[0] * wl2 for _ in range(wl1)] # 易錯1:定義不能用[[0] * wl2 ] * wl1
#易錯2: 要在每個字符串前有一個空 用 _eat 和 _sea 比較
# 打表格,把一開始能填進去的空格先填了,初始化第一列和第一行
for i in range(0, wl1):
dp[i][0] = i
for j in range(0, wl2):
dp[0][j] = j
# 狀態轉移, 寫入表格
for i in range(1, wl1):
for j in range(1, wl2):
if word1[i-1] == word2[j-1]: # 易錯3: 因爲前面多加了個空格
dp[i][j] = dp[i-1][j-1] # 如果相同的話,那麼該子問題和上一個相同
# dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) # 易錯4
else:
dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1
return dp[-1][-1]