代码:
class Solution59 {
public:
int numDistinct(string S, string T) {
//设置退出条件。
if(S.length()==0&&T.length()!=0)
{
return 0;
}
//设置用于记录的二维数组:
int m=T.length();
int n=S.length();
//这里要注意,空串的匹配也在矩阵中所以 m+1,n+1
vector<vector<int>> result(m+1,vector<int>(n+1,1));
//设置左边界条件
for(int i=1;i<m+1;i++)
{
result[i][0]=0;
}
//设置上边界条件
for(int j=1;j<n+1;j++)
{
result[0][j]=1;
}
//设置状态转移方程。
for(int i=1;i<m+1;i++)
{
for(int j=1;j<n+1;j++)
{
if(S[j-1]==T[i-1])
//这里一定要注意 i是T的索引,j是S的索引
//不能反了
{
result[i][j]=result[i][j-1]+result[i-1][j-1];
}else{
result[i][j]=result[i][j-1];
}
}
}
return result[m][n];
}
};