Straightforward recursion with top-down memoization in Python
class Solution(object):
    def LCS(self, i, j):
        if i >= self.m or j >= self.n:
            return 0
        
        if (i, j) in self.mem:
            return self.mem[i, j]
        
        if self.text1[i] == self.text2[j]:
            self.mem[i, j] = 1 + self.LCS(i+1, j+1)
        
        else:
            self.mem[i, j] = max(self.LCS(i+1, j), self.LCS(i, j+1))
        
        return self.mem[i, j]
    
    def longestCommonSubsequence(self, text1, text2):
        """
        :type text1: str
        :type text2: str
        :rtype: int
        """
        self.m = len(text1)
        self.n = len(text2)
        self.text1 = text1
        self.text2 = text2
        self.mem = {}
        
        return self.LCS(0, 0)
        
Comments (0)
No comments yet.