## Wednesday, December 19, 2012

### [Leetcode] Distinct Subsequences 解题报告

Given a string S and a string T, count the number of distinct subsequences of T in S.
A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ACE" is a subsequence of "ABCDE"while "AEC" is not).
Here is an example:
S = "rabbbit", T = "rabbit"
Return 3.
» Solve this problem

A DP problem.
[解题方法]

Code如下：
``````1:  int numDistinct(string S, string T) {
2:      // Start typing your C/C++ solution below
3:      // DO NOT write int main() function
4:      int match[200];
5:      if(S.size() < T.size()) return 0;
6:      match[0] = 1;
7:      for(int i=1; i <= T.size(); i++)
8:        match[i] = 0;
9:      for(int i=1; i<= S.size(); i ++)
10:        for(int j =T.size(); j>=1; j--)
11:          if(S[i-1] == T[j-1])
12:            match[j]+= match[j-1];
13:      return match[T.size()];
14:    }
``````

1. line 7,  应该是i<=T.size(), 因为把0作为边界使用了。
2. line 10, j应该从尾到头，因为每次要使用上一次loop的值。如果从头往尾扫的话，重复计算了。