[lintcode]118. 不同的子序列
阿新 • • 發佈:2019-02-02
連結:http://www.lintcode.com/zh-cn/problem/distinct-subsequences/
給出字串S和字串T,計算S的不同的子序列中T出現的個數。
子序列字串是原始字串通過刪除一些(或零個)產生的一個新的字串,並且對剩下的字元的相對位置沒有影響。(比如,“ACE”是“ABCDE”的子序列字串,而“AEC”不是)。
您在真實的面試中是否遇到過這個題? Yes樣例給出S = "rabbbit", T = "rabbit"
返回 3
無論S的字元與T的字元是否匹配,dp[i][j]=dp[i-1][j].也就是說,假設S已經匹配了i-1個字元,得到匹配個數為dp[i-1][j].現在無論如何S[i]是否與T[j]匹配,匹配的個數至少是dp[i-1][j] .此外,當S[i]==T[j]時,我們可以讓S[i-1]與T[j-1]去匹配。
class Solution { public: /* * @param : A string * @param : A string * @return: Count the number of distinct subsequences */ int numDistinct(string S, string T) { vector<vector<int>> dp(S.length()+1,vector<int>(T.length()+1,0)); for(int i=0;i<=S.length();i++) { dp[i][0]=1; } for(int i=1;i<=S.length();i++) { for(int j=1;j<=T.length();j++) { dp[i][j]=dp[i-1][j]; if(S[i-1]==T[j-1]) { dp[i][j]+=dp[i-1][j-1]; } } } return dp[S.length()][T.length()]; } };