Given a string S and a string T, count the number of distinct subsequences of T in S.git
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).github
Here is an example:
S = "rabbbit"
, T = "rabbit"
數組
Return 3
.測試
1 class Solution { 2 public: 3 /*用刪除的方法將串s變換到t,計算變換方法數*/ 4 int numDistinct(string s, string t) { 5 if (s.empty() || t.empty()) 6 return 0; 7 else if (s.length() < t.length()) 8 return 0; 9 else 10 { 11 //動態規劃 12 int ls = s.length(), lt = t.length(); 13 /*保存由字符串s(0,i) --> t(0,j)的方法數*/ 14 vector<vector<int> > dp(ls + 1, vector<int>(lt + 1, 0)); 15 dp[0][0] = 1; 16 for (int i = 0; i < ls; ++i) 17 { 18 /*s(0,i) 轉換爲 t(0)的方法數爲1*/ 19 dp[i][0] = 1; 20 }//for 21 for (int i = 1; i <= ls; ++i) 22 { 23 for (int j = 1; j <= lt; ++j) 24 { 25 /*首先無論當前字符是否相同,爲dp[i][j]賦初值*/ 26 dp[i][j] = dp[i - 1][j]; 27 if (s[i-1] == t[j-1]) 28 { 29 /*若是s和t的當前字符相同,有兩種選擇保留或不保留*/ 30 dp[i][j] += dp[i - 1][j - 1]; 31 }//if 32 }//for 33 }//for 34 return dp[ls][lt]; 35 } 36 } 37 };