7.4 - hard - 24

115. Distinct Subsequences
一道dp問題,dp的難點在于一是要找準狀態(tài),state,二是找遞推公式,然后就是初始化,最后就是求結(jié)果。就是這幾步,一般第一步最難,也就是找到 dp的維度和意義。

class Solution(object):
    def numDistinct(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: int
        """
        # dp[i][j] means ending with t[i], s[j] how many subsequence matches
        # if t[i] == s[j]: dp[i][j] = sum(dp[i-1][k]) for k in 0...j-1)
        # else: dp[i][j] = 0
        if not s or not t:
            return 0
        dp = [[0 for _ in range(len(s))] for _ in range(len(t))]
        for i in range(len(s)):
            if t[0] == s[i]:
                dp[0][i] = 1
        
        for i in range(1, len(t)):
            for j in range(len(s)):
                if s[j] == t[i]:
                    dp[i][j] = sum([dp[i-1][k] for k in range(j)])
        
        return sum(dp[-1])
       
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,927評論 0 33
  • 動態(tài)規(guī)劃(Dynamic Programming) 本文包括: 動態(tài)規(guī)劃定義 狀態(tài)轉(zhuǎn)移方程 動態(tài)規(guī)劃算法步驟 最長...
    廖少少閱讀 3,659評論 0 18
  • 分治方法 將問題劃分成互不相交的子問題 遞歸地求解子問題 將子問題的解組合起來 動態(tài)規(guī)劃(兩個要素:最優(yōu)子結(jié)構(gòu)、子...
    superlj666閱讀 590評論 0 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,159評論 25 708
  • 前兩天出去見和露寶耍,突然想明白了很多事情。交友,考研,人生規(guī)劃,如何處理我與周邊人的關(guān)系,如何去對待生活與學(xué)習(xí)
    子寺閱讀 270評論 0 0

友情鏈接更多精彩內(nèi)容