LeetCode 940 不同的子序列 II[动态规划] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 940 不同的子序列 II[动态规划] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。


解题思路:
只要你能够转换思维去解决这道题,还是很容易,这个思路就是遍历到某个位置的字母,把它当做之前遍历的所有的字符串的尾部,这样就构建一个26位的数组,用来记录以当前字母为尾部的字符串的个数,最后求和返回即可,代码如下:

class Solution 
public:
    const int MOD = 1e9 + 7;
    int distinctSubseqII(string s) 
        vector<long long> count(26);
        for(int i = 0; i < s.size(); i ++) 
            long long sum = 0;
            for(int j = 0; j < 26; j ++) 
                // 将当前所有字符串的数目以各个字母结尾的统计起来
                sum = (sum + count[j]) % MOD;
            
            // 本身+以该字母结尾的字符串
            count[s[i] - 'a'] = sum + 1;
        
        long long res = 0;
        for(int i = 0; i < 26; i ++) 
            res = (res + count[i]) % MOD;
        
        return res;
    
;

以上是关于LeetCode 940 不同的子序列 II[动态规划] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode-940 Distinct Subsequences II(不同的子序列 II)

LeetCode-940 hard不同的子序列 II

leetcode115.不同的子序列(动态规划)

leetcode115.不同的子序列(动态规划)

leetcode-不同的子序列(动态规划)-73

Leetcode No.115 不同的子序列(动态规划)