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 in a 32-bit signed integer.
2D Dynamic Programming
We use a 2D DP table `dp[i][j]` to represent the number of subsequences of `s[:i]` that match `t[:j]`. If `s[i-1] == t[j-1]`, we have two choices: (1) use `s[i-1]` to match `t[j-1]`, adding `dp[i-1][j-1]` ways, or (2) skip `s[i-1]` and match `t[j-1]` using `s[:i-1]`, adding `dp[i-1][j]` ways. If they don't match, we must skip `s[i-1]`.