<s>[INST] class Solution:
    def longestCommonSubsequence(self, a: str, b: str) -> int:
        m = len(a)
        n = len(b)
        dp = [[0 for _ in range(n+1)] for _ in range(m+1)]

        for i in range(1, m+1):
            for j in range(1, n+1):
                if a[i-1] == b[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
                else:
                    dp[i][j] = max(dp[i-1][j], dp[i][j-1])

        return dp[m][n]

class Solution:
    def longestCommonSubsequence(self, a: str, b: str) -> int:
        m = len(a)
        n = len(b)
        dp = [[0 for _ in range(n+1)] for _ 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
                elif a[i-1] == b[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
                else:
                    dp[i][j] = max(dp[i-1][j], dp[i][j-1])

        return dp[m][n]

The first one does not work as expected but the second one works fine. I am unable to understand why. 

Is there a significant difference between the two?[/INST]