Re: [閒聊] 每日leetcode

看板Marginalman作者 (神楽めあ的錢包)時間1年前 (2024/08/05 22:41), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串643/1548 (看更多)
712. Minimum ASCII Delete Sum for Two Strings 給兩個strings s1、s2 透過刪掉s1、s2裡的元素讓s1和s2相等 請回傳刪掉的元素最小的ASCII sum 思路: 就dp問題 跟longest common subsequence很像 用2D的DP矩陣 其中DP[i,j]代表到s1[:i]、s2[:j]刪掉元素的最小ASCII sum 當s1[i]==s2[j]就不用刪掉 此時DP[i,j]=DP[i-1,j-1] 若s1[i]!=s2[j]則dp[i,j]=min(dp[i-1,j]+s2[i],dp[i,j-1]+s1[j]) 這樣就可以得到答案了 golang code : func minimumDeleteSum(s1 string, s2 string) int { n, m := len(s1), len(s2) dp1, dp2 := make([]int, n+1), make([]int, n+1) for i := 1; i <= n; i++ { dp1[i] = int(s1[i-1]) + dp1[i-1] } for i := 0; i < m; i++ { dp2[0] = int(s2[i]) + dp1[0] for j := 1; j <= n; j++ { if s2[i] == s1[j-1] { dp2[j] = dp1[j-1] } else { dp2[j] = min(dp1[j]+int(s2[i]), dp2[j-1]+int(s1[j-1])) } } dp1 = dp2 dp2 = make([]int, n+1) } return dp1[n] } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.72.4.28 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1722868866.A.9FE.html
文章代碼(AID): #1ciEI2d- (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1ciEI2d- (Marginalman)