LeetCode72. 編輯距離

題目:

給定兩個單詞 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]

 

 

發佈了63 篇原創文章 · 獲贊 30 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章