115. Distinct Subsequences

来源:互联网 发布:权志龙ins视频软件 编辑:程序博客网 时间:2024/05/18 11:46

Given a string S and a string T, count the number of distinct subsequences of S which equals T.

A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ACE" is a subsequence of "ABCDE" while "AEC" is not).

Here is an example:
S = "rabbbit"T = "rabbit"

Return 3.

思路: Easy to understand DP in Java 使用动态规划

dp[i+1][j+1]表示S[0...j]包含T[0...i]的次数

class Solution {public:    int numDistinct(string s, string t) {        vector<vector<int>> dp(t.size()+1,vector<int>(s.size()+1,0));        for(int i=0;i<=s.size();i++)//T是0个字符,则S中所有结尾都是包含一个空串            dp[0][i]=1;        for(int i=0;i<t.size();i++)            for(int j=0;j<s.size();j++)            {                if(s[j]==t[i])                    dp[i+1][j+1]=dp[i+1][j]+dp[i][j];                else                    dp[i+1][j+1]=dp[i+1][j];            }        return dp[t.size()][s.size()];    }};



原创粉丝点击