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
- Yığın çerçevesinin ne sakladığını tanımla (char, sayı, string builder, yön).
- Soldan sağa tara; her tokende push veya indirgeme yap.
- Kenar durumları (boş, tek token, baştaki işaretler).
- 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ürZorlukBitti
- 1#20 Valid ParenthesesRehbereasy
- 2#71 Simplify PathRehbermedium
- 3#150 Evaluate Reverse Polish NotationRehbermedium
- 4#224 Basic CalculatorRehberhard
- 5#394 Decode StringRehbermedium
- 6#735 Asteroid CollisionRehbermedium