115. 不同的子序列
class Solution {
public int numDistinct(String s, String t) {
int n= s.length();
int m= t.length();
int[][] dp = new int[n+1][m+1];
for(int i=0;i<n;i++){
dp[i][0] = 1;
}
for(int i=1;i<n+1;i++){
for(int j=1;j<m+1;j++){
//注意,我们的目标是找出s中的字符来匹配t
if(s.charAt(i-1) == t.charAt(j-1)){
//前一段共同匹配的字符个数和s的前一段来匹配现在的t字符个数
dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
}else{//这个字符不匹配,所以继承上一段字符的dp
dp[i][j] = dp[i-1][j];
}
}
}
return dp[n][m];
}
}