美文网首页
python实现leetcode之115. 不同的子序列

python实现leetcode之115. 不同的子序列

作者: 深圳都这么冷 | 来源:发表于2021-10-01 00:03 被阅读0次

解题思路

使用缓存避免重复计算
定义一个函数,计算s的某区间包含t的某区间多少次
细节如代码中的注释

115. 不同的子序列

代码

class Solution(object):
    def numDistinct(self, s, t):
        cache = {}
        def dp(s, t, sb, tb, se, te):
            key = (sb, tb, se, te)
            if key not in cache:
                if tb > te: cache[key] = 1  # t的所有字符都看完了
                elif sb > se: cache[key] = 0  # t没看完但是s看完了
                elif se - sb < te - te: cache[key] = 0  # t剩下的比s剩下的长度还长
                elif s[sb] != t[tb]:  # 从生于的s里继续搜索t
                    cache[key] = dp(s, t, sb+1, tb, se, te)
                else: 
                    x = dp(s, t, sb+1, tb+1, se, te)  # case1: s和t都消除匹配的字符
                    y = dp(s, t, sb+1, tb, se, te)    # case2: 保留完整的t继续查找
                    cache[key] = x + y
            return cache[key]
        return dp(s, t, 0, 0, len(s) - 1, len(t) - 1)
效果图

相关文章

  • python实现leetcode之115. 不同的子序列

    解题思路 使用缓存避免重复计算定义一个函数,计算s的某区间包含t的某区间多少次细节如代码中的注释 115. 不同的...

  • LeetCode 115. 不同的子序列

    题目 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,...

  • leetcode 115. 不同的子序列 golang

    不同的子序列 思路 动态规划 dp[i][j]表示S前i个字符 中 T前j个字符的个数。 则有如下递推公式 如果 ...

  • LeetCode 力扣 115. 不同的子序列

    题目描述(困难难度) 给定两个字符串 S 和T,从 S 中选择字母,使得刚好和 T 相等,有多少种选法。 解法一 ...

  • 115. 不同的子序列

    题目描述 distinct-subsequences 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中...

  • 115. 不同的子序列

    题目描述 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。一个字符串的一个子序列是指...

  • 115. 不同的子序列

    给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。 一个字符串的一个子序列是指,通过删...

  • 115. 不同的子序列

    给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,通过删...

  • Leetcode 不同的子序列

    题目描述 leecode第115题:不同的子序列[https://leetcode-cn.com/problems...

  • 不同序列dp

    1987. 不同的好子序列数目[https://leetcode-cn.com/problems/number-o...

网友评论

      本文标题:python实现leetcode之115. 不同的子序列

      本文链接:https://www.haomeiwen.com/subject/mdeynltx.html