leetcode Distinct Subsequences
字符串处理与二维dp
设置二维数组v[i][j]表示S串中前i个字母的子串中包含多少个T串中前j个字母的子串”这样的问题记为A[i][j]。 可以得到递推式 :
if(S[i-1] == T[j-1]) A[i][j] = A[i-1][j-1] + A[i-1][j];
else A[i][j] = A[i-1][j];
class Solution {
public:
int numDistinct(string S, string T) {
int m=S.size();
int n=T.size();
vector<vector<int>> v(m+1,vector<int>(n+1));
v[0][0]=1;
for(int i=1;i<m+1;i++)
v[i][0]=1;
for(int j=1;j<n+1;j++)
v[0][j]=0;
for(int i=1;i<m+1;i++)
{
for(int j=1;j<n+1;j++)
{
if(S[i-1]!=T[j-1])
{
v[i][j]=v[i-1][j];
}
else v[i][j]=v[i-1][j-1]+v[i-1][j];
}
}
return v[m][n];
}
};
浙公网安备 33010602011771号