class Solution {
public:
int numDistinct(string s, string t)
{
int lens = s.size();
int lent = t.size();
vector<vector<uint64_t>> dp(lent + 1, vector<uint64_t>(lens + 1));//t逐渐变大 在s中遍历 s中t的个数
for (int i = 0; i <= lens; ++i) dp[0][i] = 1;
// for (int i = 1; i <= lent; ++i) dp[i][0] = 0;
for(int i = 1; i <= lent; ++i)//i 是 t 中的
{
for (int j = 1; j <= lens; ++j)// j 是 s 中的
{
if (s[j - 1] == t[i - 1])
dp[i][j] = dp[i - 1][j - 1] + dp[i][j - 1];//中途可能会溢出,int是不满足的 太恶毒了long long都不行
else
dp[i][j] = dp[i][j - 1];
}
}
// for(auto &x : dp)
// {
// for(auto &y : x)
// {
// cout << y << " ";
// }
// cout << endl;
// }
return int(dp[lent][lens]);
}
};
leetcode 115. 不同的子序列 C++ 2021-07-07
最新推荐文章于 2022-11-29 14:36:51 发布