İçeriğe atla
ΣDSA Patterns
Menü
Dil

Kalıp #10

Yığın ile Ayrıştırma

Önerilen

İç içe yapılar, ifadeler, yollar ve çarpışma simülasyonu.

Ne zaman kullanılır

Girdi iç içe veya soldan sağa indirgenmeli; eşleşmeyen açıcılar sonraya saklanır.

Tanıma ipuçları

  • Geçerli parantezler / decode string
  • Basit hesap makinesi / RPN
  • Asteroid çarpışması / yolu sadeleştir

Yaygın tuzaklar

  • Parantezler için yanlış eşleme haritası
  • Hesap makinelerinde tekli eksi ele almama
  • Yığını yanlış şekilde dolaşırken mutasyon

90 saniyelik tanıma egzersizi

Hangisi en iyi uyuyor?

  • Geçerli parantezler / decode string
  • Basit hesap makinesi / RPN
  • Asteroid çarpışması / yolu sadeleştir

Interactive

Zihinsel model

Değişmezin tam adım adım anlatımı. Duraklat, noktalara tıkla veya ← → kullan. Her adımı kendi cümlelerinle anlatmayı hedefle.

Adım 1 / 8
(
[
{
}
]
)
stack

Matching brackets: stack holds unmatched openers.

Nasıl düşünülür

Yığın açık iş tutar: eşleşmemiş parantezler, kısmi sayılar, yol parçaları veya canlı asteroidler. Kapatıcı tokenler yapı tutarlı olana kadar tepedeki indirger. Son yığın (veya boş) cevaptır.

Şablon şekilleri

Şekil Temel hamle Notlar
Eşleştirme Açanı push; kapanınca pop Boş ⇒ geçerli
İç içe decode Sayım ve string push ‘]’ ile genişlet
Çarpışmalar Tepe kaybederken pop Sağ kalanı push

Karmaşıklık temeli

Genelde derinlik veya çıktı boyutunda O(n) zaman ve alan.

Şablondan probleme

  1. Yığın çerçevesinin ne sakladığını tanımla (char, sayı, string builder, yön).
  2. Soldan sağa tara; her tokende push veya indirgeme yap.
  3. Kenar durumları (boş, tek token, baştaki işaretler).
  4. Kalan yığını sonuca serileştir.

Şablon

TypeScript, Python ve C#’te aynı iskelet. Değişmezi uyarla; yapıyı koru.

Yığın ile Ayrıştırma · Şablon
/** Stack parsing template: valid parentheses. */
export function isValid(s: string): boolean {
  const st: string[] = [];
  const pair: Record<string, string> = { ")": "(", "]": "[", "}": "{" };
  for (const ch of s) {
    if (ch === "(" || ch === "[" || ch === "{") st.push(ch);
    else if (!st.length || st.pop() !== pair[ch]) return false;
  }
  return st.length === 0;
}
/** Stack parsing template: valid parentheses. */
export function isValid(s: string): boolean {
  const st: string[] = [];
  const pair: Record<string, string> = { ")": "(", "]": "[", "}": "{" };
  for (const ch of s) {
    if (ch === "(" || ch === "[" || ch === "{") st.push(ch);
    else if (!st.length || st.pop() !== pair[ch]) return false;
  }
  return st.length === 0;
}
#DurumProblemTürBitti
  1. 1#20 Valid ParenthesesRehber
  2. 2#71 Simplify PathRehber
  3. 3#150 Evaluate Reverse Polish NotationRehber
  4. 4#224 Basic CalculatorRehber
  5. 5#394 Decode StringRehber
  6. 6#735 Asteroid CollisionRehber