Input: "abc"
Output: 7
Explanation: The 7 distinct subsequences are "a", "b", "c", "ab", "ac", "bc", and "abc".
Input: "aba"
Output: 6
Explanation: The 6 distinct subsequences are "a", "b", "ab", "ba", "aa" and "aba".
Input: "aaa"
Output: 3
Explanation: The 3 distinct subsequences are "a", "aa" and "aaa".
class Solution {
long mod = 1000000007;
public int distinctSubseqII(String s) {
long dp[] = new long[s.length() + 1];
int[] last = new int[26];
Arrays.fill(last, -1);
// Base cases
dp[0] = 0;
dp[1] = 1;
last[s.charAt(0) - 'a'] = 0;
for (int i = 2; i <= s.length(); i++) {
dp[i] = (dp[i - 1] * 2 + 1) % mod;
int lastIndex = last[s.charAt(i - 1) - 'a'];
if (lastIndex != -1)
dp[i] = (dp[i] - (dp[lastIndex] + 1) + mod) % mod;
last[s.charAt(i - 1) - 'a'] = i - 1;
}
return (int) (dp[s.length()] % mod);
}
}