LeetCode115 不同的子序列(dp)

LeetCode115 不同的子序列

dp[i][j] 表示字符串 s[:i] 中包子序列 t[:j] 的数量

对于当前字符 s[i]t[j]

  • 如果 s[i]==t[j]dp[i][j]=dp[i1][j1]+dp[i1][j]
  • 如果 s[i]!=t[j]dp[i][j]=dp[i1][j]

注意任意字符串 s[:i] 均包含一个空串,即 dp[i][0]=1

class Solution(object):
    def numDistinct(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: int
        """
        m, n = len(s), len(t)
        dp = [[0 for i in range(n + 1)] for j in range(m + 1)]
        for i in range(m + 1): dp[i][0] = 1

        for i in range(1, m + 1):
            for j in range(1, n + 1):
                if s[i - 1] == t[j - 1]:
                    dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]
                else:
                    dp[i][j] = dp[i - 1][j]

        return dp[m][n]

posted on   solvit  阅读(23)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示