Build a 2D table where dp[i][j] = LCS length of A[0..i-1] and B[0..j-1]. Recurrence: 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]) After filling, traceback from dp[m][n] to dp[0][0] recovers the actual LCS string.
dp[i][j]
A[0..i-1]
B[0..j-1]
A[i-1] == B[j-1]
dp[i][j] = dp[i-1][j-1] + 1
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
dp[m][n]
dp[0][0]