Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 1 / 1
Регистрация: 20.02.2018
Сообщений: 50

Скобочное выражение

20.12.2018, 15:59. Показов 4039. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот сама задача:
Напомним, что называется правильной скобочной последовательностью:

пустая строка является правильной скобочной последовательностью;
если строка а — правильная скобочная последовательность, то строки (а), [а] — тоже правильные скобочные последовательности;
если строки а и b — правильные скобочные последовательности, то строка ab — тоже правильная скобочная последовательность.
Задана строка S, состоящая из квадратных и круглых скобок. Разрешается заменять квадратную открывающую скобку ([) на круглую открывающую (() и наоборот, а также квадратную закрывающую скобку (]) на круглую закрывающую ()) и наоборот.

За одно действие разрешается изменить ровно один символ строки. Необходимо за минимальное число действий преобразовать S в правильную скобочную последовательность.

Входные данные
Входной файл INPUT.TXT содержит строку S. Ее длина не превосходит 100 000 символов.

Выходные данные
В выходной файл OUTPUT.TXT выведите искомое минимальное число действий или -1, если преобразовать S в правильную скобочную последовательность невозможно.
Тесты:
(())[] 0
[(]) 2
((]]] -1

Написал вот такую вот программу, но она не проходит какие-то тест (не приведенные мной).
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
input_string = input()
left_bracket = list()
right_bracket = list()
counter = 0
for i in input_string:
    if i == "(" or i == "[":
        if right_bracket:
            if right_bracket[-1] == "]" and i == "[":
                right_bracket.pop()
            elif right_bracket[-1] == "]" and i == "(":
                right_bracket.pop()
                counter += 1
            elif right_bracket[-1] == ")" and i == "(":
                right_bracket.pop()
            elif right_bracket[-1] == ")" and i == "[":
                right_bracket.pop()
                counter += 1
        else:
            left_bracket.append(i)
    else:
        if left_bracket:
            if left_bracket[-1] == "[" and i == "]":
                left_bracket.pop()
            elif left_bracket[-1] == "[" and i == ")":
                left_bracket.pop()
                counter += 1
            elif left_bracket[-1] == "(" and i == ")":
                left_bracket.pop()
            elif left_bracket[-1] == "(" and i == "]":
                left_bracket.pop()
                counter += 1
        else:
            right_bracket.append(i)
if len(right_bracket) == 0 and len(right_bracket) == 0:
    print(counter)
else:
    print(-1)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.12.2018, 15:59
Ответы с готовыми решениями:

Скобочное выражение
Напишите программу, которая проверяет правильность скобочного выражения с четырьмя видами скобок: (), , {}, <>.

Задача №112492. Скобочное выражение
Напишите программу, которая проверяет правильность скобочного выражения, включающего четыре вида скобок: (), , {} и <>. Должна...

Не проходит по времени (скобочное выражение)
s = input() L = "(}>" L1 = s.count('(') L2 = s.count('') R3 = s.count('}') R4 = s.count('>') stack = err = False for c in...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.12.2018, 15:59
Помогаю со студенческими работами здесь

Дано выражение вида "а x b", а и b - натуральные числа, x - сравнения, Истинно ли данное выражение?
Формат входных данных: В первой строке число а, во второй знак сравнения, в третьей - число b. Оба числа - натуральные. Формат выходных...

Добавить числа в скобочное выражение, чтобы получилось правильное арифметическое выражение
1.Дана последовательность из N круглых, квадратных и фигурных скобок. Выяснить, можно ли добавить в неё цифры и знаки арифметических...

Скобочное выражение
Помогите реализовать програмку: Дано скобочное выражение, оканчивающееся точкой с запятой. Само выражание программа должна запрашить у...

Правильное скобочное выражение
Не могу придумать как записать условие в 22 строке. Нужно чтобы если в вершине стека что то из ( { #include<iostream> ...

Правильное скобочное выражение
Дана последовательность из N круглых, квадратных и фигурных скобок. Выяснить, можно ли добавить в неё цифры и знаки арифметических действий...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru