Here, We see Distinct Subsequences LeetCode Solution. This Leetcode problem is done in many programming languages like C++, Java, JavaScript, Python, etc. with different approaches.
List of all LeetCode Solution
Distinct Subsequences LeetCode Solution
Table of Contents
Problem Statement
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.
Example 1:
Input: s = “rabbbit”, t = “rabbit”
Output: 3
Explanation: As shown below, there are 3 ways you can generate “rabbit” from s. rabbbit
rabbbit
rabbbit
Example 2:
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
Distinct Subsequences LeetCode Solution C++
class Solution {
public:
int numDistinct(string s, string t) {
int m = t.length(), n = s.length();
vector<vector<int>> dp(m + 1, vector<int> (n + 1, 0));
for (int j = 0; j <= n; j++) dp[0][j] = 1;
for (int j = 1; j <= n; j++)
for (int i = 1; i <= m; i++)
dp[i][j] = dp[i][j - 1] + (t[i - 1] == s[j - 1] ? dp[i - 1][j - 1] : 0);
return dp[m][n];
}
};
Code language: PHP (php)
Distinct Subsequences LeetCode Solution Java
class Solution {
public int numDistinct(String s, String t) {
int[][] mem = new int[t.length()+1][s.length()+1];
for(int j=0; j<=s.length(); j++) {
mem[0][j] = 1;
}
for(int i=0; i<t.length(); i++) {
for(int j=0; j<s.length(); j++) {
if(t.charAt(i) == s.charAt(j)) {
mem[i+1][j+1] = mem[i][j] + mem[i+1][j];
} else {
mem[i+1][j+1] = mem[i+1][j];
}
}
}
return mem[t.length()][s.length()];
}
}
Code language: JavaScript (javascript)
Distinct Subsequences Solution JavaScript
var numDistinct = function (s, t) {
if (s.length < t.length) return 0;
[s, t] = [t, s];
let m = s.length;
let n = t.length;
let aa = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
for (let j = 0; j <= n; j++) {
aa[0][j] = 1;
}
for (let i = 1; i <= m; i++)
for (let j = 1; j <= n; j++)
if (s[i - 1] === t[j - 1]) {
aa[i][j] = aa[i][j - 1] + aa[i - 1][j - 1];
} else {
aa[i][j] = aa[i][j - 1];
}
return aa[m][n];
};
Code language: JavaScript (javascript)
Distinct Subsequences Solution Python
class Solution(object):
def numDistinct(self, s, t):
dp = [[0] * (len(s) + 1) for _ in range(len(t) + 1)]
for col in range(len(dp[0])):
dp[0][col] = 1
for x in range(1, len(s) + 1):
for y in range(1, len(t) + 1):
if s[x - 1] == t[y - 1]:
dp[y][x] = dp[y - 1][x - 1] + dp[y][x - 1]
else:
dp[y][x] = dp[y][x - 1]
return dp[-1][-1]