题目:biubiu
题意:给字符串s和t,现在问s中有多少子串t,不改变字符的顺序,对是字符串中的某个元素可以删除或不变,就得到了s的子串。例如:s=“babgbag”,t=“bag”,那么符合题意的子串有013、016、056、256、456,数字代表下标。
动态规划:
动态规划要找到动态方程,官方题解给的思路。
class Solution {
public:
int numDistinct(string s, string t) {
int m = s.length(), n = t.length();
if (m < n) {
return 0;
}
vector<vector<unsigned long long>> dp(m + 1, vector<unsigned long long>(n + 1));
for (int i = 0; i <= m; i++) {
dp[i][n] = 1;
}
for (int i = m - 1; i >= 0; i--) {
for (int j = n - 1; j >= 0; j--) {
if (s[i] == t[j]) {
dp[i][j] = dp[i + 1][j + 1] + dp[i + 1][j];
} else {
dp[i][j] = dp[i + 1][j];
}
}
}
return dp[0][0];
}
};