rows = S prefix length (0..9), cols = T prefix length (0..3) · value = window START index in S
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
Grid DP · carry the start index
▸1dp[(n+1) × (m+1)], −1 = no window2dp[i][0] = i // empty T → start = i3for i in 1..n: for j in 1..m:4 if S[i−1] == T[j−1]: dp[i][j] = dp[i−1][j−1] // diagonal5 else: dp[i][j] = dp[i−1][j] // carry from above6 if dp[i][m] valid: window = S[dp[i][m]..i)7 keep it if shorter than best8return best window
state
- Sabcdebdde
- Tbde
- statedp[i][j] = window start in S