Google-Style Patterns¶
আগে disclaimer: এখানে "Google-style" মানে সেই publicly discussed pattern emphasis, যা interview-prep community-রা — বিশেষ করে Tech Interview Handbook আর NeetCode — এই ধরনের interview-র জন্য সচরাচর report করে। নিচের কোনো নির্দিষ্ট problem Google-এ জিজ্ঞেস করা হয়েছিল — এমন কোনো দাবি এটা নয় (NOT a claim)।
README.md-এর disclaimer-টা দেখো।
The commonly reported emphasis¶
Community-র আলোচনা ধারাবাহিকভাবে এই interview style-টাকে এদিকে ঝুঁকে থাকা বলে বর্ণনা করে:
- Graphs আর implicit graphs। যেসব problem-এ graph-টা একটা গল্পের ভেতরে লুকানো — এক অক্ষরে আলাদা শব্দ, একটা puzzle-এর state, একটা grid-এর cell — আর প্রথম insight-টা হলো "এটা একটা graph; node হলো X আর edge হলো Y।"
- Dynamic programming। বিশেষ করে যেসব problem-এ state definition-ই পুরো যুদ্ধ (folder 12-এর 5-step doctrine-টাই ঠিক narrate করার script)।
- Deliberate ambiguity। Report অনুযায়ী prompt-গুলো ইচ্ছে করেই under-specified: input size, duplicates, tie-breaking, এমনকি exact goal-টাও তোমার জন্য ছেড়ে রাখা — clarifying প্রশ্ন দিয়ে pin করতে হবে। ভুল precise problem solve করা দুটো বাড়তি প্রশ্ন করার চেয়ে খারাপ score পায়।
- Scaling follow-ups। Report অনুযায়ী একটা solved problem-এর পরে আসে "এবার input 100× বড় / streamed / memory-তে আঁটে না — কী বদলাবে?" Follow-up-টা test করে তোমার solution-টা একটা idea ছিল, নাকি মুখস্থ snippet।
- Complexity fluency। Complexity-টা যা, কেন তা — বলতে পারা, আর next-best বিকল্পটার খরচ কত, তাও।
The thinking posture to practice (যে ভঙ্গিটা practice করবে)¶
- প্রতিটা prompt-কে ইচ্ছাকৃত অসম্পূর্ণ ধরো। প্রতিবার 2–3-টা clarifying প্রশ্ন দিয়ে শুরু করো, এমনকি উত্তর জানো মনে হলেও — অভ্যাসটাই skill।
- Code-এর আগে abstraction-টা মুখে বলো: "আমি এটাকে একটা graph হিসেবে model করব, যেখানে node হলো ___ আর edge হলো " বা "আমার DP state হলো ।" Model-এর নাম বলাটাই credit-এর বেশিরভাগ।
- Solve করার পরে নিজের solution-টাকেই আক্রমণ করো: "n যদি 10⁹ হতো, এটা ভাঙত কারণ ; আমি -এ switch করতাম।" জিজ্ঞেস হওয়ার আগেই follow-up-টা practice করা।
Representative public problems for this style¶
সবগুলোই public LeetCode problem, বাছা হয়েছে কারণ এরা উপরের reported emphasis-টা exercise করায়। প্রতিটা row map করে সেই repo folder-এ, যেটা নিচের tool-টা শেখায়।
Table-টা পড়ার guide:
- Underlying tools হলো সেটাই, যা একটা mock-এর প্রথম পাঁচ মিনিটের মধ্যে মুখে নাম ধরে বলতে পারা উচিত — এই style-এ differentiator হলো নামটা বলা, final code নয়।
- Taught in হলো পিছু হটার পথ: কোনো tool নড়বড়ে মানে mock schedule থামিয়ে আগে ওই folder-এর tracker আবার করা।
- এগুলো mock হিসেবে solve করো (
README.md-এর 45-minute format), study problem হিসেবে নয় — এই folder ধরে নেয় tool-গুলো আগেই শেখা।
| Problem (described in our own words) | Link | Underlying tools | Taught in |
|---|---|---|---|
| Word Ladder — দুটো শব্দের মধ্যে এক-অক্ষর বদলের shortest chain | LeetCode 127 | Implicit graph + BFS shortest path | ../09-graphs/, ../05-hashing/ |
| Number of Islands — একটা grid-এ connected জমির তাল গোনো | LeetCode 200 | Grid as graph + flood fill (BFS/DFS) | ../09-graphs/ |
| Course Schedule — prerequisite দিয়ে কি সব course শেষ করা যায়? | LeetCode 207 | Cycle detection / topological sort | ../09-graphs/topological-sort.md |
| Longest Increasing Subsequence | LeetCode 300 | Anchored state-এর DP; O(n log n) follow-up | ../12-dynamic-programming/ |
| Word Break — একটা string-কে dictionary-শব্দে ভাগ করো | LeetCode 139 | Prefix DP + hash set | ../12-dynamic-programming/, ../05-hashing/ |
| Edit Distance — দুই string-এর মধ্যে minimum edit | LeetCode 72 | Two-sequence string DP | ../12-dynamic-programming/ |
| Median of Two Sorted Arrays — মিলিত median দ্রুত খোঁজো | LeetCode 4 | Partition-এর উপর binary search | ../03-searching-and-sorting/ (binary search) |
| Longest Consecutive Sequence — unsorted input-এ পরপর integer-এর longest দৌড় | LeetCode 128 | Hash set + চালাক scan start | ../05-hashing/ |
| Count of Smaller Numbers After Self | LeetCode 315 | BIT + compression দিয়ে order statistics | ../11-segment-tree-and-fenwick-tree/ |
| Trapping Rain Water — দেয়ালের মাঝে জমা পানি | LeetCode 42 | Two pointers / monotonic stack | ../02-arrays-and-strings/, hard-patterns.md |
| Serialize and Deserialize Binary Tree — round-trip encoding design করো | LeetCode 297 | Tree traversal + format design (ambiguity practice) | ../07-trees/ |
| Unique Paths — lattice path গোনা, "blocked cell হলে?" follow-up-সহ | LeetCode 62 | Grid DP + follow-up scaling | ../12-dynamic-programming/ |
How to practice this style (এই style কীভাবে practice করবে)¶
README.md-এর 45-minute mock format চালাও, কিন্তু phase 1-কে (clarify) বাড়তি ওজন দাও: তুমি যে অন্তত তিনটা assumption বাছলে, আর কেন — লিখে রাখো।- নিজের উপর একটা follow-up চাপাও। প্রতিটা solve-এর পরে 5 মিনিট বাড়তি খরচ করো এগুলোর একটার উত্তরে: "input একটা stream", "input 1000× বড়", "এবার শুধু count নয়, আসল solution-টা return করো"। বদলটা sketch করো; code করতেই হবে এমন নয়।
- Model-টা narrate করো। Graph problem-এ node/edge মুখে না বলে কখনো coding শুরু কোরো না। DP-তে state-এর বাক্যের আগে কখনোই না।
- উপরের table-এর আক্রমণের order: Number of Islands → Course Schedule → Word Ladder (graphs warm to hot), তারপর Word Break → LIS → Edit Distance (DP warm to hot), তারপর বাকিগুলো।
- Weakness routing: graph modeling step-এ জমে গেলে ফিরে যাও
../09-graphs/-এ; state definition-এ জমে গেলে../12-dynamic-programming/state-transition-thinking.md-এ।
A clarifying-question bank for ambiguous prompts¶
Ambiguity সামলানো একটা trainable script, talent নয়। এগুলো একটা card-এ রাখো আর প্রতিটা mock-এর phase 1-এ প্রাসঙ্গিকগুলো ছোড়ো:
- Size and scale: "n কত বড় হতে পারে — শত, নাকি million? Input কি memory-তে আঁটে?"
- Value ranges: "Value কি negative হতে পারে? Zero? Duplicated? কত বড়?"
- Structure guarantees: "Input কি sorted? Connected? Acyclic? Tree কি empty হতে পারে?"
- Output contract: "Count চাও, value, নাকি আসল solution reconstruct করা? কয়েকটা valid উত্তরের যেকোনোটা, নাকি নির্দিষ্ট কোনো tie-break?"
- Degenerate inputs: "Empty input / কোনো valid উত্তর না থাকলে কী হবে — -1 return, empty list, নাকি raise?"
- Mutation rights: "Input-টা কি in place modify করতে পারি, নাকি অক্ষত রাখতে হবে?"
তারপর solve করার আগে তোমার বাছা assumption-গুলো মুখে বলো: "আমি ধরছি সর্বোচ্চ 10⁵ শব্দ, শুধু lowercase, আর chain length return করব, impossible হলে 0।" Assumption বাছা আর ঘোষণা করাটাই demonstrated skill।
Common failure modes in this style (and the fix) (সাধারণ ভুল আর সমাধান)¶
| Failure mode | What it looks like | Fix |
|---|---|---|
| না-জিজ্ঞেস-করা problem solve করা | ভুল spec-এর জন্য 20 মিনিটের সুন্দর solution | Phase 2-এর আগেই problem-টা আবার বলো আর সম্মতি নাও |
| Model-এর বাক্যটা skip করা | "Node হলো X, edge হলো Y" ছাড়াই code হাজির | কড়া নিয়ম: abstraction মুখে না বলা পর্যন্ত code নয় |
| মুখস্থ-solution-এর ধস | Main solution নিখুঁত, scaling follow-up-এ পুরো জমে যাওয়া | প্রতি practice problem-এ নিজের উপর একটা follow-up, সবসময় |
| হাত-নাড়া complexity | "এটা মোটামুটি n log n-এর মতো?" | Derive করো: states × work per state, মুখে বলে |
| DP state design নয়, আন্দাজ | Transition বারবার fail করে, আতঙ্কে rewrite | Folder 12-এর পুরো 5-step doctrine চালাও, কাগজে |
| ভাবার সময় নীরবতা | 90 সেকেন্ডের চুপচাপ মানে আটকে গেছ বলে মনে হয় | Dead end-গুলোও narrate করো: "এখানে sorting কাজে দিচ্ছে না কারণ..." |
A one-week practice block for this style¶
| Day | Work | Focus |
|---|---|---|
| 1 | Number of Islands + Course Schedule (mocks) | Graph model-টা মুখে বলা |
| 2 | Word Ladder (mock) + wildcard-bucket optimization-টা লেখো | Implicit graphs + একটা scaling choice |
| 3 | Word Break + LIS (mocks) | State-এর বাক্য, code-এর আগে বলা |
| 4 | Edit Distance (mock) + তার table হাতে আবার derive করো | Two-dimensional state fluency |
| 5 | Longest Consecutive Sequence + Trapping Rain Water (mocks) | Obvious sort-এর ওপারে হাত বাড়ানো |
| 6 | Median of Two Sorted Arrays (mock, 60 min অনুমোদিত) | Partition-এর উপর binary search — এখানকার কঠিনতম একক idea |
| 7 | সপ্তাহের সবচেয়ে খারাপ rubric score-টা cold অবস্থায় আবার চেষ্টা করো | Loop-টা বন্ধ করা |
প্রতিটা দিন শেষ হয় দিনের একটা problem-এর উপর পাঁচ মিনিটের self-imposed follow-up দিয়ে ("streamed হলে? 1000× বড় হলে? আসল path লাগলে?")।
What "good" sounds like in this style ("ভালো" শুনতে কেমন)¶
"Solve করার আগে: dictionary-তে কি শব্দ repeat করতে পারে? Alphabet কি শুধু lowercase? মোটামুটি কয়টা শব্দ — 10² না 10⁵? ... ঠিক আছে। আমি এটাকে একটা implicit graph হিসেবে model করব: node হলো শব্দ, edge জোড়ে এক অক্ষরে আলাদা শব্দদের। Shortest chain মানে BFS। সব edge naively বানালে O(n²·L); n 10⁵ পর্যন্ত গেলে সেটা too slow, তাই আমি বরং wildcard bucket generate করব — সেটা O(n·L²) preprocessing..."
ওখানকার প্রতিটা বাক্য rubric point কামায়: clarification, model-এর নাম, complexity আর scaling-সচেতন একটা design choice — code-এর একটা লাইন জন্মানোর আগেই।
Readiness checklist for this style¶
পরের style file-এ rotate করতে তৈরি, যখন এগুলো সবকটায় সৎভাবে টিক দিতে পারবে:
- [ ] প্রতিটা mock-এ অন্তত তিনটা clarifying প্রশ্ন করো, আগে দেখা problem-সহ।
- [ ] প্রতিবার, কোনো code লেখার আগে graph model বা DP state-এর বাক্যটা বলো।
- [ ] প্রতি problem-এ একটা self-imposed scaling follow-up-এর উত্তর পাঁচ মিনিটের sketch-এর মধ্যে দিতে পারো।
- [ ] Complexity মনে করার বদলে derive করো — states × work (বা nodes + edges) হিসেবে।
- [ ] Table থেকে তোমার শেষ তিনটা mock
README.md-এর rubric-এ 12+/16 পেয়েছে।