На всякий случай - решение третьей задачки отредактировал с учетом проверки вложенности.
Позже, правда, сообразил - программа отрабатывает не все возможные ситуации. Она справляется с прямой однократной вложенностью:
{...[..(.....)..]...}
и даже с такой:
{...[..(...)..(...)...]..}
Но вот если, например, так:
{...[...(..)...[...]..]..)
или так:
{...[..(...)...(...)..]..[..(..)....]..},
то увы... И как это универсально алгоритмизировать - не соображу. Уж извините - чем богаты...