940. Distinct Subsequences II
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.
Solutions
Solution: Dynamic Programming
- Time complexity: O(n * 26)
- Space complexity: O(26)
JavaScript
js
/**
* @param {string} s
* @return {number}
*/
const distinctSubseqII = function (s) {
const MODULO = 10 ** 9 + 7;
const BASE_CODE = 'a'.charCodeAt(0);
const dp = Array.from({length: 26}).fill(0);
const accumulate = nums => nums.reduce((sum, num) => sum + num);
for (const letter of s) {
const code = letter.charCodeAt(0) - BASE_CODE;
dp[code] = (accumulate(dp) + 1) % MODULO;
}
return accumulate(dp) % MODULO;
};