LeetCode Python 72 編輯距離

2021-09-23 17:12:49 字數 1446 閱讀 5945

給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 。

你可以對乙個單詞進行如下三種操作:

插入乙個字元

刪除乙個字元

替換乙個字元

示例 1:

輸入:word1 = "horse", word2 = "ros"輸出:3解釋:horse -> rorse (將 'h' 替換為 'r')

rorse -> rose (刪除 'r')

rose -> ros (刪除 'e')

示例 2:

輸入:word1 = "intention", word2 = "execution"輸出:5解釋:intention -> inention (刪除 't')

inention -> enention (將 'i' 替換為 'e')

enention -> exention (將 'n' 替換為 'x')

exention -> exection (將 'n' 替換為 'c')

exection -> execution (插入 'u')

思路:

dp,用dp[i][j]表示word1[:i + 1], word2[:j + 1]這個問題的解。

class solution(object):

def mindistance(self, word1, word2):

""":type word1: str

:type word2: str

:rtype: int

"""#用dp[i][j]表示word1[:i + 1], word2[:j + 1]這個問題的解

m, n = len(word1), len(word2)

dp = [[0 for _ in range(n + 1)] for _ in range(m + 1)]

for i in range(m + 1):

dp[i][0] = i

for i in range(n + 1):

dp[0][i] = i

for i in range(1, m + 1):

for j in range(1, n + 1):

if word1[i - 1] == word2[j - 1]:

dp[i][j] = dp[i - 1][j - 1]

else:

dp[i][j] = 1 + min(dp[i - 1][j], dp[i - 1][j - 1], dp[i][j - 1]) #分別對應插入,替換,刪除

return dp[m][n]

LeetCode Python 7 翻轉整數

感覺進度慢的很,但是邊學邊做好像剛上來確實有點.不順暢,這個題中間的wa完全是我個人問題 大概最近不適合做題吧.可能應該休息兩天再動手 chorme的自動翻譯讓我做個題都難受 掛 class solution def reverse self,x type x int rtype int if x ...

LeetCode Python 打家劫舍I

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...

leetcode Python編碼練習

貪心演算法 1.環形路上有n個加油站,第i個加油站的汽油量是gas i 你有一輛車,車的油箱可以無限裝汽油。從加油站i走到下乙個加油站 i 1 花費的油量是cost i 你從乙個加油站出發,剛開始 的時候油箱裡面沒有汽油。求從哪個加油站出發可以在環形路上走一圈。返回加油站的下標,如果沒有答案的話返回...