distinct subsequences

 1 class Solution {
 2 public:
 3     int helper(vector<vector<int>> &v, string S,int i, string T, int j)
 4     {
 5         if( T.length() == j ) return 1;
 6         if( T.length() - j > S.length() - i ) return 0;
 7         int sum = 0;
 8         if( v[i][j] != -1 ) return v[i][j];
 9         for(int k = i;k<S.length();k++)
10         {
11             if( v[k][j] != -1 )
12                 sum += v[k][j];
13             else
14             {
15                 if( S[k] == T[j] )
16                     sum += helper(v,S,k+1,T,j+1);
17             }
18         }
19         v[i][j] = sum;
20         return sum;
21     }
22     int numDistinct(string S, string T) {
23         // Start typing your C/C++ solution below
24         // DO NOT write int main() function
25         vector<vector<int>> v(S.length(),vector<int>(T.length(),-1));
26         return helper( v,S,0,T,0);
27     }
28 };

 

posted on 2013-09-06 11:09  jumping_grass  阅读(151)  评论(0)    收藏  举报

导航