LeetCode: Distinct Subsequences

来源:互联网 发布:淘宝双十一h5页面 编辑:程序博客网 时间:2024/05/15 23:47

思路:

标准的DP题目,设ret(i,j)表示 s(1)...s(i) 能够形成 t(1) ... t(j)子字符串的方式数目,则:

如果s(i) == t(j) , ret(i, j) = ret(i-1,j-1) + ret(i-1, j)

否则,ret(i, j) = ret(i-1, j)

code:

class Solution {public:    int numDistinct(string S, string T) {        int len1 = S.length(), len2 = T.length();        if(len2 > len1) return 0;        vector<int> t(len2+1,0);        vector<vector<int> > ret(len1+1,t);        for(int i = 0;i <= len1;i++)            ret[i][0] = 1;        for(int i = 1;i <= len1;i++)            for(int j = 1;j <= i && j <= len2;j++){                if(S[i-1] == T[j-1])                    ret[i][j] = ret[i-1][j-1] + ret[i-1][j];                else                    ret[i][j] = ret[i-1][j];            }        return ret[len1][len2];    }};


0 0
原创粉丝点击