distinct-subsequences¶
Try it on leetcode
Description¶
Given two strings s
and t
, return the number of distinct subsequences of s
which equals t
.
A string's subsequence is a new string formed from the original string by deleting some (can be none) of the characters without disturbing the remaining characters' relative positions. (i.e., "ACE"
is a subsequence of "ABCDE"
while "AEC"
is not).
The test cases are generated so that the answer fits on a 32-bit signed integer.
Example 1:
Input: s = "rabbbit", t = "rabbit" Output: 3 Explanation: As shown below, there are 3 ways you can generate "rabbit" from S.rabbbit
rabbbit
rabbbit
Example 2:
Input: s = "babgbag", t = "bag" Output: 5 Explanation: As shown below, there are 5 ways you can generate "bag" from S.babgbag
babgbag
babgbag
babgbag
babgbag
Constraints:
1 <= s.length, t.length <= 1000
s
andt
consist of English letters.
Solution(Python)¶
class Solution:
@cache
def numDistinct(self, s: str, t: str) -> int:
if len(t) == 0:
return 1
elif len(s) == 0:
return 0
elif s[-1] == t[-1]:
return self.numDistinct(s[:-1], t[:-1]) + self.numDistinct(s[:-1], t)
else:
return self.numDistinct(s[:-1], t)