package com.interview.books.leetcodeoj;
/**
* Created_By: stefanie
* Date: 14-12-26
* Time: 下午5:11
*/
public class LOJ115_DistinctSubsequence {
//state: count[i][j]: is the distinct subsequence count of S.substring(0, i) and T.substring(0, j)
//initialize: count[0][j] = 0 and count[i][0] = 1
//function: if S.charAt(i - 1) != T.charAt(j - 1) count[i][j] = count[i-1][j]
// if S.charAt(i - 1) == T.charAt(j - 1) count[i][j] = count[i-1][j] + count[i-1][j-1]
//result: count[S.length()][T.length()]
public int numDistinct(String S, String T) {
int[][] count = new int[S.length() + 1][T.length() + 1];
for(int i = 0; i <= S.length(); i++) count[i][0] = 1;
for(int i = 1; i <= S.length(); i++){
for(int j = 1; j <= T.length(); j++){
count[i][j] = count[i-1][j];
if(S.charAt(i - 1) == T.charAt(j - 1)) count[i][j] += count[i-1][j-1];
}
}
return count[S.length()][T.length()];
}
}