Print Shortest Common Supersequence (Leetcode 1092)

Print SCS

Problem Link: https://leetcode.com/problems/shortest-common-supersequence/

class Solution:
    def shortestCommonSupersequence(self, str1: str, str2: str) -> str:
        m=len(str1)
        n=len(str2)
        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 or j==0):
                    dp[i][j]=0
                else:
                    if(str1[i-1]==str2[j-1]):
                        dp[i][j]=1+dp[i-1][j-1]
                    else:
                        dp[i][j]=max(dp[i-1][j],dp[i][j-1])
        i=m
        j=n
        ans=''
        while(i!=0 and j!=0):
            if(str1[i-1]==str2[j-1]):
                ans+=str1[i-1]
                i-=1
                j-=1
            else:
                if(dp[i-1][j]>dp[i][j-1]):
                    ans+=str1[i-1]
                    i-=1
                else:
                    ans+=str2[j-1]
                    j-=1
        while(i!=0):
            ans+=str1[i-1]
            i-=1
        
        while(j!=0):
            ans+=str2[j-1]
            j-=1
        
        return ans[::-1]

Last updated