dp
int dp[2][100000];
class Solution {
public:
int numDistinct(string s, string t) {
int n=s.size(),m=t.size();
int i,j;
memset(dp,0,sizeof(dp));
if(m>n)
return 0;
for(i=0;i<2;i++)
dp[i][0]=1;
int tag=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=i&&j<=m;j++)
{
if(s[i-1]==t[j-1])
dp[tag^1][j]=dp[tag][j]+dp[tag][j-1];
else
dp[tag^1][j]=dp[tag][j];
//cout<<dp[tag^1][j]<<" ";
}
//cout<<endl;
tag=tag^1;
}
return dp[tag][m];
}
};