| 1 | Initialize DP table | - | - | dp filled with zeros | [[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0]] |
| 2 | Compare s1[1]='A' and s2[1]='B' | (1,1) | A vs B | No match, dp[1][1] = max(dp[0][1], dp[1][0]) = 0 | dp[1][1]=0 |
| 3 | Compare s1[1]='A' and s2[2]='D' | (1,2) | A vs D | No match, dp[1][2] = max(dp[0][2], dp[1][1]) = 0 | dp[1][2]=0 |
| 4 | Compare s1[1]='A' and s2[3]='C' | (1,3) | A vs C | No match, dp[1][3] = max(dp[0][3], dp[1][2]) = 0 | dp[1][3]=0 |
| 5 | Compare s1[1]='A' and s2[4]='A' | (1,4) | A vs A | Match, dp[1][4] = dp[0][3] + 1 = 1 | dp[1][4]=1 |
| 6 | Compare s1[1]='A' and s2[5]='B' | (1,5) | A vs B | No match, dp[1][5] = max(dp[0][5], dp[1][4]) = 1 | dp[1][5]=1 |
| 7 | Compare s1[1]='A' and s2[6]='A' | (1,6) | A vs A | Match, dp[1][6] = dp[0][5] + 1 = 1 | dp[1][6]=1 |
| 8 | Compare s1[2]='B' and s2[1]='B' | (2,1) | B vs B | Match, dp[2][1] = dp[1][0] + 1 = 1 | dp[2][1]=1 |
| 9 | Compare s1[2]='B' and s2[2]='D' | (2,2) | B vs D | No match, dp[2][2] = max(dp[1][2], dp[2][1]) = 1 | dp[2][2]=1 |
| 10 | Compare s1[2]='B' and s2[3]='C' | (2,3) | B vs C | No match, dp[2][3] = max(dp[1][3], dp[2][2]) = 1 | dp[2][3]=1 |
| 11 | Compare s1[2]='B' and s2[4]='A' | (2,4) | B vs A | No match, dp[2][4] = max(dp[1][4], dp[2][3]) = 1 | dp[2][4]=1 |
| 12 | Compare s1[2]='B' and s2[5]='B' | (2,5) | B vs B | Match, dp[2][5] = dp[1][4] + 1 = 2 | dp[2][5]=2 |
| 13 | Compare s1[2]='B' and s2[6]='A' | (2,6) | B vs A | No match, dp[2][6] = max(dp[1][6], dp[2][5]) = 2 | dp[2][6]=2 |
| 14 | Compare s1[3]='C' and s2[1]='B' | (3,1) | C vs B | No match, dp[3][1] = max(dp[2][1], dp[3][0]) = 1 | dp[3][1]=1 |
| 15 | Compare s1[3]='C' and s2[2]='D' | (3,2) | C vs D | No match, dp[3][2] = max(dp[2][2], dp[3][1]) = 1 | dp[3][2]=1 |
| 16 | Compare s1[3]='C' and s2[3]='C' | (3,3) | C vs C | Match, dp[3][3] = dp[2][2] + 1 = 2 | dp[3][3]=2 |
| 17 | Compare s1[3]='C' and s2[4]='A' | (3,4) | C vs A | No match, dp[3][4] = max(dp[2][4], dp[3][3]) = 2 | dp[3][4]=2 |
| 18 | Compare s1[3]='C' and s2[5]='B' | (3,5) | C vs B | No match, dp[3][5] = max(dp[2][5], dp[3][4]) = 2 | dp[3][5]=2 |
| 19 | Compare s1[3]='C' and s2[6]='A' | (3,6) | C vs A | No match, dp[3][6] = max(dp[2][6], dp[3][5]) = 2 | dp[3][6]=2 |
| 20 | Compare s1[4]='B' and s2[1]='B' | (4,1) | B vs B | Match, dp[4][1] = dp[3][0] + 1 = 1 | dp[4][1]=1 |
| 21 | Compare s1[4]='B' and s2[2]='D' | (4,2) | B vs D | No match, dp[4][2] = max(dp[3][2], dp[4][1]) = 1 | dp[4][2]=1 |
| 22 | Compare s1[4]='B' and s2[3]='C' | (4,3) | B vs C | No match, dp[4][3] = max(dp[3][3], dp[4][2]) = 2 | dp[4][3]=2 |
| 23 | Compare s1[4]='B' and s2[4]='A' | (4,4) | B vs A | No match, dp[4][4] = max(dp[3][4], dp[4][3]) = 2 | dp[4][4]=2 |
| 24 | Compare s1[4]='B' and s2[5]='B' | (4,5) | B vs B | Match, dp[4][5] = dp[3][4] + 1 = 3 | dp[4][5]=3 |
| 25 | Compare s1[4]='B' and s2[6]='A' | (4,6) | B vs A | No match, dp[4][6] = max(dp[3][6], dp[4][5]) = 3 | dp[4][6]=3 |
| 26 | Compare s1[5]='D' and s2[1]='B' | (5,1) | D vs B | No match, dp[5][1] = max(dp[4][1], dp[5][0]) = 1 | dp[5][1]=1 |
| 27 | Compare s1[5]='D' and s2[2]='D' | (5,2) | D vs D | Match, dp[5][2] = dp[4][1] + 1 = 2 | dp[5][2]=2 |
| 28 | Compare s1[5]='D' and s2[3]='C' | (5,3) | D vs C | No match, dp[5][3] = max(dp[4][3], dp[5][2]) = 2 | dp[5][3]=2 |
| 29 | Compare s1[5]='D' and s2[4]='A' | (5,4) | D vs A | No match, dp[5][4] = max(dp[4][4], dp[5][3]) = 2 | dp[5][4]=2 |
| 30 | Compare s1[5]='D' and s2[5]='B' | (5,5) | D vs B | No match, dp[5][5] = max(dp[4][5], dp[5][4]) = 3 | dp[5][5]=3 |
| 31 | Compare s1[5]='D' and s2[6]='A' | (5,6) | D vs A | No match, dp[5][6] = max(dp[4][6], dp[5][5]) = 3 | dp[5][6]=3 |
| 32 | Compare s1[6]='A' and s2[1]='B' | (6,1) | A vs B | No match, dp[6][1] = max(dp[5][1], dp[6][0]) = 1 | dp[6][1]=1 |
| 33 | Compare s1[6]='A' and s2[2]='D' | (6,2) | A vs D | No match, dp[6][2] = max(dp[5][2], dp[6][1]) = 2 | dp[6][2]=2 |
| 34 | Compare s1[6]='A' and s2[3]='C' | (6,3) | A vs C | No match, dp[6][3] = max(dp[5][3], dp[6][2]) = 2 | dp[6][3]=2 |
| 35 | Compare s1[6]='A' and s2[4]='A' | (6,4) | A vs A | Match, dp[6][4] = dp[5][3] + 1 = 3 | dp[6][4]=3 |
| 36 | Compare s1[6]='A' and s2[5]='B' | (6,5) | A vs B | No match, dp[6][5] = max(dp[5][5], dp[6][4]) = 3 | dp[6][5]=3 |
| 37 | Compare s1[6]='A' and s2[6]='A' | (6,6) | A vs A | Match, dp[6][6] = dp[5][5] + 1 = 4 | dp[6][6]=4 |
| 38 | Compare s1[7]='B' and s2[1]='B' | (7,1) | B vs B | Match, dp[7][1] = dp[6][0] + 1 = 1 | dp[7][1]=1 |
| 39 | Compare s1[7]='B' and s2[2]='D' | (7,2) | B vs D | No match, dp[7][2] = max(dp[6][2], dp[7][1]) = 2 | dp[7][2]=2 |
| 40 | Compare s1[7]='B' and s2[3]='C' | (7,3) | B vs C | No match, dp[7][3] = max(dp[6][3], dp[7][2]) = 2 | dp[7][3]=2 |
| 41 | Compare s1[7]='B' and s2[4]='A' | (7,4) | B vs A | No match, dp[7][4] = max(dp[6][4], dp[7][3]) = 3 | dp[7][4]=3 |
| 42 | Compare s1[7]='B' and s2[5]='B' | (7,5) | B vs B | Match, dp[7][5] = dp[6][4] + 1 = 4 | dp[7][5]=4 |
| 43 | Compare s1[7]='B' and s2[6]='A' | (7,6) | B vs A | No match, dp[7][6] = max(dp[6][6], dp[7][5]) = 4 | dp[7][6]=4 |
| 44 | Backtrack from dp[7][6] | - | - | LCS length = 4 | LCS found by backtracking: 'BDAB' |