1143. Longest Common Subsequence

class Solution:
    def longestCommonSubsequence(self, text1: str, text2: str) -> int:
        
        # (i, j) = longest length
        # if text1[i] == text2[j]  (i, j) = 1 + (i - 1, j - 1)
        # else (i, j) = max((i - 1, j), (i, j - 1))


        # dp = [[0] * (len(text2) + 1) for _ in range((len(text1) + 1))]

        # for r in range(len(text1)):
        #     for c in range(len(text2)):
        #         if text1[r] == text2[c]:
        #             dp[r + 1][c + 1] = 1 + dp[r][c]
        #         else:
        #             dp[r + 1][c + 1] = max(dp[r][c + 1], dp[r + 1][c])


        # return dp[-1][-1]

        dp = [0] * (len(text2) + 1)

        for r in range(1, len(text1) + 1):
            temp = [0] * (len(text2) + 1)
            for c in range(1, len(text2) + 1):
                if text1[r - 1] == text2[c - 1]:
                    temp[c] = 1 + dp[c - 1]
                else:
                    temp[c] = max(dp[c], temp[c - 1])

            dp = temp

        return dp[-1]

CleanShot 2024-03-26 at 12.35.18 1.png