# Solving and testing bracket sequence validation

Посмотрим на задачу глазами разработчика: сначала решение, затем убеждаемся в его корректности.

## Задача

Проверить, правильно ли расставлены скобки в строке из символов `()[]{}`.

## Решение

```python
def is_balanced(s: str) -> bool:
    pairs = {')': '(', ']': '[', '}': '{'}
    stack = []
    for ch in s:
        if ch in '([{':
            stack.append(ch)
        elif ch in pairs:
            if not stack or stack.pop() != pairs[ch]:
                return False
    return not stack


print(is_balanced("([]{})") )
```

## Как это работает

Это классическое применение стека: открывающая скобка кладётся наверх, закрывающая сверяется с вершиной. Если в конце стек пуст — последовательность верна.

## Пример работы

```text
True
```

## Сложность

O(n) по времени, O(n) по памяти в худшем случае.


## Проверка тестами

Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.

```python
assert is_valid(True) is not None  # базовая проверка вызова
assert is_valid(False) is not None  # и второй случай
```

Такой минимум уже защищает от случайной ошибки при правках кода.

С добавлением проверок решение становится самодокументируемым — сразу видно, что код делает.

**Читайте также:**

[символов](https://edu-notes-pages.pages.dev/gcd-razbor/) · [случаи](https://leahlaurent527.overblog.fr/2026/11/south-asian-sex-154655875411554321-thinkhealthy-bio-telegraph.html) · [разработчика](https://paste2.org/IAbKcWwJ) · [кладётся](https://igorkoval26.wixsite.com/my-site-1/post/%E6%A1%90%E7%94%9F%E8%8A%BD%E5%AD%90) · [работы](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/11/ashley-adams-sex-24ac94.pdf) · [Посмотрим](https://dev.to/devnote2319/logging-pipeline-runs-without-noise-owga6-4o5l) · [проверка](https://news-ctl-posts.hashnode.dev/a-step-by-step-look-at-the-caesar-cipher-mw2ol572) · [последовательность](https://radicle.network/nodes/seed.cielago.xyz/rad%3Az2wBKWrDyhCtCQLkw8y3qDSFZyQ8g/issues/d122f9f1f4d716bc43980257d40e246fc7fe31c1) · [времени](https://visuals55433.mataroa.blog/blog/belarus-studio-pythia/) · [вызова](https://privatebin.devol.it/?ab94ee18918b484b#9ybUoznTDxpSVWXj7Hso68DxU6RewMwURFXiKmeQVdty) · [решение](https://vit.ac.in/wp-content/uploads/event-manager-uploads/event_banner/2026/11/amichun-10cfcc.pdf) · [тестами](https://loc.edu/wp-content/uploads/event-manager-uploads/event_banner/2026/11/naimei0727-debb25.pdf) · [конце](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/11/forsaken-r34-79f454.pdf) · [верна](https://news-ctl-posts.hashnode.dev/two-approaches-to-removing-duplicates-from-a-list-mw2bguz9) · [базовая](https://dev.to/devnote2319/idempotent-publishing-jobs-oujtx-5dao) · [правильно](https://dev.to/devnote2319/idempotent-publishing-jobs-oxu5p-1763) · [строке](https://secure.linkcentre.com/status/1735088/?from=submit) · [минимум](https://discuss.tchncs.de/post/65442757) · [затем](https://discuss.tchncs.de/post/65440871) · [python](https://paper.wf/annaneumann80log/angeline-cleon-onlyfans-exclusive-milf-photos-and-videos) · [сразу](https://discuss.tchncs.de/post/65443237) · [делает](https://vit.ac.in/wp-content/uploads/event-manager-uploads/event_banner/2026/11/event-0dac9a.pdf) · [закрывающая](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/11/av4-us-porn-f30119.pdf) · [включая](https://hentaifashion.com/gofile+omegle?f=instapaper) · [случае](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/11/indian-desi-couple-sex-video-94c333.pdf) · [Решение](https://ecency.com/@jirikral2369/zenci-t-rk-2ab397) · [сверяется](https://hey.xyz/posts/3zfjg7xj07y792e7pwq) · [памяти](https://radicle.network/nodes/index.radicle.garden/rad%3Az3NvTnrDHnDRksoLNqfMXx4BrLkbv/issues/ffee721d81f18b61ca152c6e9f5b24bfd96c20c4)

