#python #стек
На этот вопрос уже даны ответы здесь: Проверить правильно ли вложены скобки 〈 ( { [ ] } ) 〉в тексте (2 ответа) Закрыт 2 года назад. Всем привет, кто может помочь с реализацией проверки на правильность скобочной последовательности через стек на Python. Суть проверки я знаю, и просто через условия реализовала, но со стеком не могу понять, помогите пожалуйста. def brackets_check(s): meetings = 0 for c in s: if c == '(': meetings += 1 elif c == ')': meetings -= 1 if meetings < 0: return False return meetings == 0
Ответы
Ответ 1
А мне понравился этот простой и хитрый алгоритм -- главное чтобы строка в нем не имела символом, кроме ()[]{}, там даже объяснять ничего не нужно: def is_correct_brackets(text): while '()' in text or '[]' in text or '{}' in text: text = text.replace('()', '') text = text.replace('[]', '') text = text.replace('{}', '') # Возвращаем True, если text с пустой строкой return not text print(is_correct_brackets('(((())))')) # True print(is_correct_brackets('(((())')) # False print(is_correct_brackets('())))')) # False print(is_correct_brackets('((((){}[]{}[])))')) # True print(is_correct_brackets('(){}[]{}[])))')) # False print(is_correct_brackets('(){}[]{}[]')) # TrueОтвет 2
На самом деле, всё очень просто. Вы идёте от начала строки. Каждый раз, когда встречаете открывающую скобку - кладёте её в стек. Каждый раз, когда встречаете закрывающую - убираете из стека ранее положенную скобку. Если нужно убрать скобку из стека, а их там больше не осталось - последовательность неправильная. Если после разбора строки в стеке остались лишние скобки - последовательность неправильная. Во всех остальных случаях - правильная. Так же можно проверять последовательность, в которой есть разные скобки - круглые, квадратные, фигурные и т.п. Просто к тем проверкам, которые я описал выше, добавляется ещё проверка на то, что забираемая из стека открывающая скобка по форме должна совпадать с той закрывающей, которая у вас сейчас встретилась в строке.
Комментариев нет:
Отправить комментарий