/*动态规划法。
设dp[i][j]表示S[0...i]中T[0...j]出现的次数,则有
1)若S[i]!=S[j],dp[i][j] = dp[i-1][j];
2)若S[i]==S[j],dp[i][j] = dp[i-1][j] + dp[i-1][j-1]。*/
class Solution {
public:
int numDistinct(string s, string t) {
if(s.empty()) return 0;
vector<int> dp(t.size(), 0);
dp[0] = (s[0] == t[0] ? 1 : 0);
for(int i = 1; i < s.size(); ++i){
for(int j = t.size()-1; j >= 0; --j){
if(j == 0 && s[i] == t[j]){
dp[j] += 1;
continue;
}
if(s[i] == t[j]) dp[j] = dp[j] + dp[j-1];
}
}
return dp[t.size()-1];
}
};
LeetCode之Distinct Subsequences
最新推荐文章于 2020-06-06 05:36:44 发布