3.7.10 · D1 · HinglishAlgorithm Paradigms

FoundationsDP problems — Longest Common Subsequence (LCS)

2,377 words11 min read↑ Read in English

3.7.10 · D1 · Coding › Algorithm Paradigms › DP problems — Longest Common Subsequence (LCS)

Is page par yeh assume kiya gaya hai ki tumne kuch nahi dekha. Hum har woh letter, arrow, aur bracket banate hain jis par parent LCS note ek-ek brick se rely karta hai. Agar neeche koi term already obvious lage, skim karo — lekin har ek jagah hai jahan beginners silently trip karte hain.


1. "String" kya hoti hai

Picture: socho ek seedhe wire par beads. Har bead ek character hai, aur wire unka order fix karti hai — bead 4 ko bead 2 ke aage slide nahi kar sakte wire kaate bina.

Figure — DP problems — Longest Common Subsequence (LCS)

Topic ko yeh kyun chahiye. LCS do aisi wires ko compare karta hai aur poochta hai ki kaunse beads dono mein line up hote hain, wire ka order intact rakhte hue. Agar fixed order na hota, toh protect karne ke liye koi "same relative order" hi nahi hoti.


2. Strings aur unke characters ko naam dena: , , ,

Parent likhta hai aur . Aao har piece samjhein.

Picture: beads ki do rows stacked. Ek finger jis par likha hai woh top row mein ek bead ko point karti hai; ek finger jis par likha hai woh bottom row mein ek bead ko point karti hai.

Figure — DP problems — Longest Common Subsequence (LCS)

3. Subsequence vs substring — woh picture jo dono ko alag karti hai

Yahi THE distinction hai jis par poora topic tika hai.

Picture — same string, do alag rules:

Figure — DP problems — Longest Common Subsequence (LCS)

ABCDE se:

  • ACE ek subsequence hai (A rakho, B skip, C rakho, D skip, E rakho — order preserved, gaps allowed).
  • ACE ek substring nahi hai (A, C, E ek doosre ke paas nahi hain).
  • BCD ek substring hai (ek solid slice).

Topic ko yeh kyun chahiye. LCS = dono strings mein common sabse lamba subsequence. Ise substring se confuse karna ek bilkul alag recurrence deta hai (parent ke mistake box mein dekho). Yeh abhi pakad lo aur aadhe traps gayab ho jaate hain. Contiguous cousin Longest Common Substring mein rehta hai.


4. Prefix — woh chunks jis par hum actually recurse karte hain

Picture: ek sliding cut. Position ke baad ek chaaqu rakho; chaaqu ke left mein sab kuch prefix hai. Chaaqu ko right slide karo aur prefix barhta hai.


5. Label — do pointers ka ek function

"Length" kyun, khud string kyun nahi? Lengths single numbers hain, compare karna aur add karna trivial hai. Hum pehle saari lengths compute karte hain (fast), phir ek actual string recover karne ke liye sirf tabhi backwards chalte hain jab chahiye (parent ka traceback). "Kitni lambi" aur "kaunse letters" ko alag rakhna core ko simple rakhta hai.

Jo final answer chahiye woh hai — woh box jisme dono dials poori tarah upar hain, yaani dono poori strings.


6. Recurrence ke andar tools: , , aur do cases

Parent ki formula do operations use karti hai. Dono ek plain-words picture deserve karti hain.

Yahan matlab "equal nahi". Ek case ke andar ek test hai ("kya yeh do characters same hain?"), assignment nahi.


7. Base case aur grid mein extra row/column kyun hai

Picture: ek empty wire mein koi beads nahi hain; koi bead kuch nahi ke against match nahi kar sakti. Toh grid mein row ya column ka har cell hai — yahi woh walls hain jisse hum bahar ki taraf build karte hain.


8. Grid padhna: up, left, diagonal

Har bhara hua cell teen pehle-computed neighbours se decide hota hai:

Picture: ek cell par khado. Match rule diagonal tak pahunchti hai (dono dials neeche). Mismatch rule up aur left tak pahunchti hai aur bada rakhti hai. Yeh directional habit — "match diagonal jaata hai, miss max leta hai" — poora mechanical skill hai.

Recall Kaun se case ke liye kaun sa neighbour?

Match kaun sa neighbour use karta hai? ::: Diagonal (up-left), plus 1. Mismatch kaun se neighbours use karta hai? ::: Up aur left, max lo.


Prerequisite map

String = ordered characters

Index x_i, y_j pointers into strings

Lengths m and n

Subsequence keeps order allows gaps

Prefix X first i chars

Function L i,j returns a length

max operation keep the bigger

Empty prefix means length 0

m+1 by n+1 DP grid

LCS recurrence match diagonal miss max

Answer at corner L m,n


Equipment checklist

Right side cover karo aur khud test karo. Agar koi bhi answer fuzzy lage, parent ki derivation tackle karne se pehle woh section dobara padho.

ka kya matlab hai, aur yeh multiplication kyun NAHI hai?
String ke andar position par character; subscript ek address/pointer hai, product nahi.
aur kya hain?
Respectively aur ki lengths (characters ki count).
Subsequence aur substring mein kya farq hai?
Subsequence order rakhta hai lekin gaps allow karta hai (skips); substring contiguous hona chahiye (koi gaps nahi).
Prefix kya hai?
ka starting chunk, uske pehle characters bina kisi skip ke.
kya hai?
Empty prefix "" — zero characters.
Plain words mein kya hai?
ke pehle characters aur ke pehle characters ke longest common subsequence ki length.
kis tarah ka object hai?
Ek function (ek two-dial lookup box) jo do numbers leta hai aur ek length return karta hai.
kya karta hai aur mismatch par ise kyun use karte hain?
mein se bada return karta hai; hum dono "ek character drop" options try karte hain aur better rakhte hain.
Match exactly add kyun karta hai aur DONO dials peeche kyun jaate hain?
Ek shared letter end ke liye mila; woh har string se ek character use karta hai, isliye dono prefixes ek se shrink hote hain (diagonal).
Base case kyun hai?
Ek empty prefix mein koi characters nahi hain, isliye kuch share nahi ho sakta.
Grid ki jagah kyun hai?
Index 0 par "empty prefix" zeros ki row/column hold karne ke liye, taaki har cell ke safe up/left/diagonal neighbours hon.
Final answer kaun sa cell hold karta hai?
Bottom-right corner , dono poori strings use karke.