V primeru niza '[(){[]}]'
bi postopek tekel takole:
Korak | Znak | Dejanje | Sklad |
---|---|---|---|
(1) | [ | dodaj na sklad | [ |
(2) | ( | dodaj na sklad | [( |
(3) | ) | odvzemi s sklada in preveri ujemanje | [ |
(4) | { | dodaj na sklad | [{ |
(5) | [ | dodaj na sklad | [{[ |
(6) | ] | odvzemi s sklada in preveri ujemanje | [{ |
(7) | } | odvzemi s sklada in preveri ujemanje | [ |
(8) | ] | odvzemi s sklada in preveri ujemanje | |
(9) | sklad je prazen ⇒ return True |
V primeru niza '[(){[}]]'
pa bi se postopek končal že pri koraku (6), saj se prebrani zaklepaj }
ne bi ujemal s predklepajem [
, ki bi ga v tem koraku odvzeli s sklada.
Zakaj opisana logika deluje? Zato, ker se na skladu vedno nahajajo tisti predklepaji, ki še niso zaključeni, in to po vrsti od skrajnega zunanjega do skrajnega notranjega (če gledamo od dna do vrha sklada). Na vrhu sklada se torej nahaja tisti predklepaj, ki ga moramo najprej zaključiti. Preveri sam(-a)!
Zapišimo funkcijo Oklepaji
skupaj s pomožno funkcijo SeUjema
in kodo za preverjanje v datoteko oklepaji.py
: