要求:s有多少个t
思路:相等时,不匹配的话i-1有多少个j就多少个,匹配的话等于i-1有多少个j-1
class Solution {
public:
int numDistinct(string s, string t) {
int n = s.size(), m = t.size();
if(m > n){
return 0;
}
// f[i][j], s 串前 i 个字母,包含 t 串前 j 个字母的子串个数。
vector<vector<unsigned int>> f(n+1, vector<unsigned int>(m+1, 0));
for(int i=0; i<=n; i++){
f[i][0] = 1;
}
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
if(s[i-1] == t[j-1]){
f[i][j] = f[i-1][j-1] + f[i-1][j];
}else{
f[i][j] = f[i-1][j];
}
}
}
return f[n][m];
}
};