Description
Given a string s, return the number of distinct non-empty subsequences of s
. Since the answer may be very large, return it modulo 109 + 7
.
"ace"
is a subsequence of "abcde"
while "aec"
is not.
Β
Example 1:
Input: s = "abc" Output: 7 Explanation: The 7 distinct subsequences are "a", "b", "c", "ab", "ac", "bc", and "abc".
Example 2:
Input: s = "aba" Output: 6 Explanation: The 6 distinct subsequences are "a", "b", "ab", "aa", "ba", and "aba".
Example 3:
Input: s = "aaa" Output: 3 Explanation: The 3 distinct subsequences are "a", "aa" and "aaa".
Β
Constraints:
1 <= s.length <= 2000
s
consists of lowercase English letters.
Solution
Python3
class Solution:
def distinctSubseqII(self, s: str) -> int:
n = len(s)
M = 10 ** 9 + 7
res = 0
dp = [1] * n
for i in range(n):
for j in range(i):
if s[i] != s[j]:
dp[i] += dp[j]
dp[i] %= M
res += dp[i]
res %= M
return res