124. Leetcode 583. 两个字符串的删除操作 (动态规划- 字符串系列)
生活随笔
收集整理的這篇文章主要介紹了
124. Leetcode 583. 两个字符串的删除操作 (动态规划- 字符串系列)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
步驟一、確定狀態:
確定dp數組及下標含義 dp[i][j]表示的是word1[:i]和word2[:j]相同所需要的最小步數。
步驟二、推斷狀態方程:
確定動態轉移方程,依然是分相等和不相等。 word1[i-1]==word2[j-1]: 當前字符相等,那么直接不用動,步數就是各自退一步的步數 dp[i][j]=dp[i-1][j-1]
word1[i-1] != word2[j-1]:
當前字符不相等, 那么要么word1刪除當前字符,要么word2刪除當前字符, 那么最小步數就是min(dp[i-1][j], dp[i][j-1])+1。
步驟三、規定初始條件:
初始條件:
全局初始化為0,而第一行和第一列需要初始化
步驟四、計算順序:
dp數組從[1,1]位置遍歷,外層遍歷word1, 內層遍歷 word2。
class Solution:def minDistance(self, word1: str, word2: str) -> int:# 異常判斷if len(word1) == 0:return len(word2)if len(word2) == 0:return len(word1)# 初始化dp = [[0 for _ in range(len(word2) + 1)] for _ in range(len(word1) + 1)]for i in range(len(word1) + 1):dp[i][0] = ifor j in range(len(word2) + 1):dp[0][j] = jfor i in range(1, len(word1) + 1):for j in range(1, len(word2) + 1):if word1[i-1] == word2[j-1]:dp[i][j] = dp[i-1][j-1]else:dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + 1return dp[-1][-1]?
總結
以上是生活随笔為你收集整理的124. Leetcode 583. 两个字符串的删除操作 (动态规划- 字符串系列)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 123. Leetcode 72. 编辑
- 下一篇: 125. Leetcode 91. 解码