leetcode Distinct Subsequences

字符串处理与二维dp

设置二维数组v[i][j]表示S串中前i个字母的子串中包含多少个T串中前j个字母的子串”这样的问题记为A[i][j]。 可以得到递推式 :
if(S[i-1] == T[j-1]) A[i][j] = A[i-1][j-1] + A[i-1][j];
else A[i][j] = A[i-1][j];

class Solution {
public:
    int numDistinct(string S, string T) {
        int m=S.size();
        int n=T.size();
        vector<vector<int>> v(m+1,vector<int>(n+1));
        v[0][0]=1;
        for(int i=1;i<m+1;i++)
        v[i][0]=1;
        for(int j=1;j<n+1;j++)
        v[0][j]=0;
        for(int i=1;i<m+1;i++)
        {
            for(int j=1;j<n+1;j++)
            {
                if(S[i-1]!=T[j-1])
                {
                    v[i][j]=v[i-1][j];
                }
                else v[i][j]=v[i-1][j-1]+v[i-1][j];
            }
        }
        return v[m][n];
    }
};

 

posted @ 2013-05-18 21:37  代码改变未来  阅读(425)  评论(0编辑  收藏  举报