代码随想录算法训练营第五十五天| 392.判断子序列、115.不同的子序列

代码随想录算法训练营第五十五天| 392.判断子序列、115.不同的子序列

题目

392.判断子序列

给定字符串 st ,判断 s 是否为 t 的子序列。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        s_len, t_len = len(s), len(t)
        dp = [[0] * (t_len + 1) for _ in range(s_len + 1)]
        for i in range(1, s_len + 1):
            for j in range(1, t_len + 1):
                dp[i][j] = dp[i - 1][j - 1] + 1 if s[i - 1] == t[j - 1] else dp[i][j - 1]
        return dp[-1][-1] == s_len

题目

115.不同的子序列

给你两个字符串 st ,统计并返回在 s子序列t 出现的个数,结果需要对 109 + 7 取模。

class Solution:
    def numDistinct(self, s: str, t: str) -> int:
        s_len, t_len = len(s), len(t)
        dp = [[0] * (t_len + 1) for _ in range(s_len + 1)]
        # 初始化列
        for i in range(s_len + 1):
            dp[i][0] = 1
        for i in range(1, s_len + 1):
            for j in range(1, t_len + 1):
                dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j] if s[i - 1] == t[j - 1] else dp[i - 1][j]
        return dp[-1][-1]

你可能感兴趣的:(代码随想录,算法,数据结构)