public int numDistinct(String S, String T) {
		if (S == null || T == null) {
			return 0;
		}

		int[][] nums = new int[S.length() + 1][T.length() + 1];

		for (int i = 0; i < S.length(); i++) {
			nums[i][0] = 1;
		}
		for (int i = 1; i <= S.length(); i++) {
			for (int j = 1; j <= T.length(); j++) {
				nums[i][j] = nums[i - 1][j];
				if (S.charAt(i - 1) == T.charAt(j - 1)) {
					nums[i][j] += nums[i - 1][j - 1];
				}
			}
		}
		return nums[S.length()][T.length()];
	}