classSolution{public:intdistinctSubseqII(strings);};constintmod=(int)1e9+7;intSolution::distinctSubseqII(stringstr){// dp[ch] is the number of distinct subsequences ending
// at character ch.
vector<int>dp(26);for(charch:str){intsum=0;for(inti=0;i<26;i++){sum+=dp[i];sum%=mod;}// We discard all subsequences ending at last_occ[ch]
// Hence, you don't see a +=
dp[ch-'a']=(1+sum)%mod;}intans=0;for(inti=0;i<26;i++){ans+=dp[i];ans%=mod;}returnans;}