| 1 | Initialize dp[0][*] and dp[*][0] | - | - | dp[i][0]=0 and dp[0][j]=0 | [Row0 and Col0 all zeros] |
| 2 | Compare X[0] and Y[0] | (1,1) | X='A', Y='B' | No match, dp[1][1] = max(dp[0][1], dp[1][0]) = 0 | [[0,0,0],[0,0,...],...] |
| 3 | Compare X[0] and Y[1] | (1,2) | X='A', Y='D' | No match, dp[1][2] = max(dp[0][2], dp[1][1]) = 0 | [[0,0,0],[0,0,0],...] |
| 4 | Compare X[0] and Y[2] | (1,3) | X='A', Y='C' | No match, dp[1][3] = max(dp[0][3], dp[1][2]) = 0 | [[0,0,0,0],[0,0,0,0],...] |
| 5 | Compare X[0] and Y[3] | (1,4) | X='A', Y='A' | Match, dp[1][4] = dp[0][3] + 1 = 1 | [[0,0,0,0,0],[0,0,0,0,1],...] |
| 6 | Compare X[1] and Y[0] | (2,1) | X='B', Y='B' | Match, dp[2][1] = dp[1][0] + 1 = 1 | [[0,0,0,0,0],[0,0,0,0,1],[0,1,...],...] |
| 7 | Compare X[1] and Y[1] | (2,2) | X='B', Y='D' | No match, dp[2][2] = max(dp[1][2], dp[2][1]) = 1 | [... dp[2][2]=1 ...] |
| 8 | Compare X[1] and Y[2] | (2,3) | X='B', Y='C' | No match, dp[2][3] = max(dp[1][3], dp[2][2]) = 1 | [... dp[2][3]=1 ...] |
| 9 | Compare X[1] and Y[3] | (2,4) | X='B', Y='A' | No match, dp[2][4] = max(dp[1][4], dp[2][3]) = 1 | [... dp[2][4]=1 ...] |
| 10 | Compare X[2] and Y[0] | (3,1) | X='C', Y='B' | No match, dp[3][1] = max(dp[2][1], dp[3][0]) = 1 | [... dp[3][1]=1 ...] |
| 11 | Compare X[2] and Y[1] | (3,2) | X='C', Y='D' | No match, dp[3][2] = max(dp[2][2], dp[3][1]) = 1 | [... dp[3][2]=1 ...] |
| 12 | Compare X[2] and Y[2] | (3,3) | X='C', Y='C' | Match, dp[3][3] = dp[2][2] + 1 = 2 | [... dp[3][3]=2 ...] |
| 13 | Compare X[2] and Y[3] | (3,4) | X='C', Y='A' | No match, dp[3][4] = max(dp[2][4], dp[3][3]) = 2 | [... dp[3][4]=2 ...] |
| 14 | Compare X[3] and Y[0] | (4,1) | X='D', Y='B' | No match, dp[4][1] = max(dp[3][1], dp[4][0]) = 1 | [... dp[4][1]=1 ...] |
| 15 | Compare X[3] and Y[1] | (4,2) | X='D', Y='D' | Match, dp[4][2] = dp[3][1] + 1 = 2 | [... dp[4][2]=2 ...] |
| 16 | Compare X[3] and Y[2] | (4,3) | X='D', Y='C' | No match, dp[4][3] = max(dp[3][3], dp[4][2]) = 2 | [... dp[4][3]=2 ...] |
| 17 | Compare X[3] and Y[3] | (4,4) | X='D', Y='A' | No match, dp[4][4] = max(dp[3][4], dp[4][3]) = 2 | [... dp[4][4]=2 ...] |
| 18 | DP table complete | - | - | LCS length = dp[4][4] = 2 | [Full dp table filled] |
| 19 | Trace back to find LCS | - | - | LCS sequence found: 'BA' or 'CA' depending on path | - |
| 20 | End | - | - | Return LCS length 2 | - |