7.4 - hard - 24

115. Distinct Subsequences
一道dp问题,dp的难点在于一是要找准状态,state,二是找递推公式,然后就是初始化,最后就是求结果。就是这几步,一般第一步最难,也就是找到 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])
       
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,358评论 0 33
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 8,877评论 0 18
  • 分治方法 将问题划分成互不相交的子问题 递归地求解子问题 将子问题的解组合起来 动态规划(两个要素:最优子结构、子...
    superlj666阅读 3,526评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,637评论 25 709
  • 前两天出去见和露宝耍,突然想明白了很多事情。交友,考研,人生规划,如何处理我与周边人的关系,如何去对待生活与学习
    子寺阅读 1,751评论 0 0

友情链接更多精彩内容