Given two strings s and t, return the number of distinct subsequences of s which equals t.
The test cases are generated so that the answer fits on a 32-bit signed integer.
Input: s = "rabbbit", t = "rabbit" Output: 3 Explanation: As shown below, there are 3 ways you can generate "rabbit" from s. rabbbit rabbbit rabbbit
Input: s = "babgbag", t = "bag" Output: 5 Explanation: As shown below, there are 5 ways you can generate "bag" from s. babgbag babgbag babgbag babgbag babgbag
1 <= s.length, t.length <= 1000
s
andt
consist of English letters.
impl Solution {
pub fn num_distinct(s: String, t: String) -> i32 {
let s = s.as_bytes();
let t = t.as_bytes();
let mut dp = vec![vec![0; t.len()]; s.len()];
for i in 0..s.len() {
for j in 0..t.len().min(i + 1) {
if i > 0 {
dp[i][j] = dp[i - 1][j];
}
if s[i] == t[j] {
if j == 0 {
dp[i][j] += 1;
} else {
dp[i][j] = (dp[i][j] + dp[i - 1][j - 1]) % 1_000_000_007;
}
}
}
}
dp[s.len() - 1][t.len() - 1]
}
}