解法:动态规划
注意:用unsigned,int会溢出。
class Solution {
public:
int numDistinct(string s, string t) {
int m=t.size(),n=s.size();
//状态:字符串T中以i结尾的子字符串 在 字符串S中以j结尾的子字符串中出现的次数
unsigned dp[m+1][n+1]={0};
//初始化
for(int i=0;i<=n;i++)
dp[0][i]=1;
//转移方程
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
if(t[i-1]!=s[j-1])
dp[i][j]=dp[i][j-1];
else
dp[i][j]=dp[i][j-1]+dp[i-1][j-1];
}
return dp[m][n]; //结果
}
};