LC 1143 [M] Longest Common Subsequence - ALawliet/algorithms GitHub Wiki

class Solution:
    def longestCommonSubsequence(self, text1: str, text2: str) -> int:
        @cache
        def dp(i, j):
            if i == len(text1) or j == len(text2):
                return 0
            elif text1[i] == text2[j]:
                return 1 + dp(i+1, j+1)
            else:
                return max(dp(i+1, j), dp(i, j+1))

        return dp(0, 0)
class Solution:
    def longestCommonSubsequence(self, text1: str, text2: str) -> int:
        T = [[0 for j in range(len(text2) + 1)] for i in range(len(text1) + 1)]
        
        for i in range(len(text1) - 1, -1, -1):
            for j in range(len(text2) - 1, -1, -1):
                if text1[i] == text2[j]:
                    T[i][j] = T[i+1][j+1] + 1
                else:
                    T[i][j] = max(T[i][j+1], T[i+1][j])
                    
        return T[0][0]