public int numDistinct(String S, String T) {
		if (S.length()==0 || T.length()==0 || S.length()<T.length()) {
			return 0;
		}
		int dp[][]= new int [S.length()+1][T.length()+1];
		for (int i = 0; i <= S.length(); i++) {
			dp[i][0]=1;
		}
		char[] sArray = S.toCharArray();
		char[] tArray = T.toCharArray();
		for (int i = 1; i <= S.length(); i++) {
			for (int j = 1; j <= T.length(); j++) {
				if (sArray[i - 1] == tArray[j - 1]) {
					dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
				} else {
					dp[i][j] = dp[i - 1][j];
				}
			}
		}
		return dp[S.length()][T.length()];
	}