392.判断子序列
class Solution {
public:bool isSubsequence(string s, string t) {if(s.size()==0)return true;if(t.size()==0) return false;vector<bool> dp(t.size()+1, true);for(int i=0; i<s.size(); i++){for(int j=t.size(); j>0; j--){if(s[i]==t[j-1]&&dp[j-1]==true){dp[j]=true;}else{dp[j] = false;}}for(int i=2; i<=dp.size(); i++){if(dp[i-1]) dp[i]=true;cout<<dp[i];}cout<<endl;}return dp[t.size()];}
};
115.不同的子序列
class Solution {
public:int numDistinct(string s, string t) {vector<vector<unsigned int >> dp(t.size()+1, vector<unsigned int>(s.size()+1, 0));for(int i=0;i<=s.size(); i++){dp[0][i] =1;}for(int i=1; i<=t.size(); i++){for(int j=1; j<=s.size(); j++){if(s[j-1]==t[i-1]) dp[i][j]=dp[i-1][j-1]+dp[i][j-1];else if(s[j-1]!=t[i-1]) dp[i][j] = dp[i][j-1];}}return dp[t.size()][s.size()];}
};
class Solution {
public:int numDistinct(string s, string t) {vector<unsigned int > dp(t.size()+1);dp[0] = 1;for(int i=0; i<s.size(); i++){for(int j=t.size(); j>0; j--){if(s[i]==t[j-1]) dp[j] = dp[j] + dp[j-1];}}return dp[t.size()];}
};