class Solution { public int numDistinct(String s, String t) { int m = s.length(), n = t.length(); int[][] dp = new int[m+1][n+1]; // dp[i][j]表示s前i个包含t前j个多少个 if(s.equals(t)) return 1; for(int i = 0; i <= m; i++) { dp[i][0] = 1; } for(int i = 1; i <= m; i++) { for(int j = 1; j <= n; j++) { if(s.charAt(i-1) == t.charAt(j-1)) { dp[i][j] = dp[i-1][j-1] + dp[i-1][j]; // 匹配加不匹配 } else { dp[i][j] = dp[i-1][j]; // 不匹配 } } } return dp[m][n]; } }