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.rabbbitrabbbitrabbbit
Example 2:
Input: s = "babgbag", t = "bag" Output: 5 Explanation: As shown below, there are 5 ways you can generate "bag" from S.babgbagbabgbagbabgbagbabgbagbabgbag
Constraints:
1 <= s.length, t.length <= 1000sandtconsist 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)