Distinct Subsequences

Problem Link: https://leetcode.com/problems/distinct-subsequences/

Recursion

class Solution:
    def numDistinct(self, s: str, t: str) -> int:
        
        def recursion(s,t,i,j):
            if(j<0):
                return 1
            if(i<0):
                return 0
            
            if(s[i]==t[j]):
                consider=recursion(s,t,i-1,j-1)
                reject=recursion(s,t,i-1,j)
                return consider+reject
            else:
                reject=recursion(s,t,i-1,j)
                return reject
        
        i=len(s)-1
        j=len(t)-1                
        ans = recursion(s,t,i,j)
        return ans

Tabulation

class Solution:
    def numDistinct(self, s: str, t: str) -> int:        
        m=len(s)
        n=len(t)
        dp=[[0 for i in range(n+1)] for j in range(m+1)]
        for i in range(m+1):
            for j in range(n+1):
                if(i==0):
                    dp[i][j]=0
                if(j==0):
                    dp[i][j]=1    
                else:
                    if(s[i-1]==t[j-1]):
                        consider=dp[i-1][j-1]
                        reject=dp[i-1][j]
                        dp[i][j]=consider+reject
                    else:
                        dp[i][j]=dp[i-1][j]
        return dp[m][n]

Last updated