1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { public int numDistinct(String s, String t) { if (s.length() < t.length()) { return 0; }
int[][] dp = new int[s.length() + 1][t.length() + 1]; dp[0][0] = 1;
for (int i = 1; i <= s.length(); i++) { dp[i][0] = 1; } for (int j = 1; j <= t.length(); j++) { dp[0][j] = 0; }
for (int i = 1; i <= s.length(); i++) { for (int j = 1; j <= t.length(); j++) { if (s.charAt(i - 1) == t.charAt(j - 1)) { dp[i][j] = dp[i - 1][j - 1]; dp[i][j] += dp[i - 1][j]; } else { dp[i][j] = dp[i - 1][j]; } } }
return dp[s.length()][t.length()]; } }
|
References
115. Distinct Subsequences
115. 不同的子序列
剑指 Offer II 097. 子序列的数目