class Solution {
public:
int numDistinct(string s, string t) {
const int MOD = 1e9 + 7; // 定义模数
vector<vector<long long>> dp(s.length() + 1, vector<long long>(t.length() + 1, 0));
for(int i = 0; i <= s.length(); i++){
dp[i][0] = 1; // 从 s 的任何前缀中形成空的 t 有一种方法
}
for(int i = 1; i <= s.length(); i++){
for(int j = 1; j <= t.length(); j++){
if(s[i - 1] == t[j - 1]){
dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j]) % MOD; // 使用模运算
}
else
dp[i][j] = dp[i - 1][j] % MOD; // 使用模运算
}
}
return dp[s.length()][t.length()] % MOD; // 返回结果时也使用模运算
}
};
LeetCode115.不同的子序列
最新推荐文章于 2024-10-03 23:25:47 发布