Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/222: Рейтинг темы: голосов - 222, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 01.02.2018
Сообщений: 46

Проверить, является ли правильной скобочная последовательность

16.03.2018, 19:14. Показов 43689. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ограничение по времени работы программы: 1 секунда

Требуется определить, является ли правильной данная последовательность круглых, квадратных и фигурных скобок.
Входные данные

В единственной строке входных данных записано подряд N
скобок (1⩽N⩽105).
Выходные данные

Выведите «YES», если данная последовательность является правильной, и «NO» в противном случае.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.03.2018, 19:14
Ответы с готовыми решениями:

Является ли правильной данная последовательность круглых, квадратных фигурных скобок
Требуется определить, является ли правильной данная последовательность круглых, квадратных фигурных скобок. Пример тест () ответ ...

Проверить, является ли расстановка скобок правильной
В строке, состоящей из букв, цифр, знаков арифметических операций, а также двух видов скобок: ( и ), нужно проверить, является ли...

Проверить, является ли введенная скобочная последовательность правильной (рекурсия)
Дано слово из круглых и фигурных скобок. Требуется определить является ли введенное выражение правильным (Надеюсь не требуется объяснять...

37
 Аватар для Wi0M
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
16.03.2018, 22:17
ну вот у тебя есть 3 вида скобок) последовательность является правильной если кол-во открывающих и закрывающих одного вида скобок равно) и есть замечательный класс Counter из прекраснейшего модуля collections.
0
119 / 103 / 53
Регистрация: 13.04.2014
Сообщений: 233
16.03.2018, 23:03
Wi0M, к сожалению всё не так просто, например последовательность {[}] пройдёт через описанный тест, хотя не является правильной. Я предлагаю реализовать через стек: открывающаяся скобка - положить, закрывающаяся - вытащить и проверить на соответствие.
0
17.03.2018, 00:06

Не по теме:

orAnd, хм... да, согласен. заработался видимо)

0
 Аватар для FilArt97
37 / 36 / 16
Регистрация: 11.03.2018
Сообщений: 95
17.03.2018, 04:34
Лови, без стека
Python
1
2
3
def check(s):
    s = s.replace('[]', '').replace('()', '').replace('{}', '')
    return False if s else True
Со стеком будет что-то такое, не могу довести до ума:
Python
1
2
3
4
5
6
7
8
9
10
11
12
pars = {'(':')', '[':']', '{':'}'}
 
def check(s):
    stack = []
    t = 1
    for i in s:
        if i in pars:
            stack.append(i)
        elif i == pars[stack.pop()] and not stack and t == len(s):
            return True
        t += 1
    return False
0
119 / 103 / 53
Регистрация: 13.04.2014
Сообщений: 233
17.03.2018, 12:10
Со стаком
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
pars = {')':'(', ']':'[', '}':'{'}
 
def check(s):
    stack = []
    for ch in s:
        if ch in pars.values():
            stack.append(ch)
        elif ch in pars.keys():
            if not (stack and pars[ch] == stack.pop()):
                return False
        else:
            pass # Действие если встречен не скобковый символ
    return True
0
0 / 0 / 0
Регистрация: 01.02.2018
Сообщений: 46
17.03.2018, 14:42  [ТС]
Не проходит...
0
3 / 3 / 0
Регистрация: 02.01.2018
Сообщений: 9
17.03.2018, 14:51
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def Bracket_check(n):
    sp = []
    flag = False
    for i in range(len(n)):
        if n[i] == '(':
            sp.append(n[i])
        elif n[i] == ')' and len(sp) == 0:
            flag = True
            break
        elif n[i] == ')' and sp[-1] == '(':
            del sp[-1]
    if len(sp) == 0 and not flag:
        print('YES')
    else:
        print('NO')
1
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
17.03.2018, 15:37
Python
1
2
3
4
5
>>> s= '[{()}]'
>>> s= s.replace('[',']').replace('(',')').replace('{','}')
>>> ln = len(s)//2
>>> s[:ln] == s[ln:][::-1]
True
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.03.2018, 15:39
FilArt97, не работает
Python
1
2
3
4
5
def check(s):
    s = s.replace('[]', '').replace('()', '').replace('{}', '')
    return False if s else True
 
print(check('[[[[()]]]]'))  # False
Цитата Сообщение от Pasha0005 Посмотреть сообщение
Не проходит...
Упирается во временное ограничение или тесты проваливаются?
0
3 / 3 / 0
Регистрация: 02.01.2018
Сообщений: 9
17.03.2018, 15:42
А мой работает?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.03.2018, 15:43
vic5710, не работает:
Python
1
2
3
4
s = '[[[()]]]()'
s = s.replace('[',']').replace('(',')').replace('{','}')
ln = len(s)//2
print (s[:ln] == s[ln:][::-1])  # False
Добавлено через 47 секунд
hkhk,

Цитата Сообщение от Pasha0005 Посмотреть сообщение
последовательность круглых, квадратных и фигурных скобок.
0
3 / 3 / 0
Регистрация: 02.01.2018
Сообщений: 9
17.03.2018, 15:46
Ну так в чем проблема автору доработать?Если ему все готовое делать он ничему не научится

Добавлено через 14 секунд
Зачем репутацию минусить?
1
20 / 12 / 6
Регистрация: 17.03.2018
Сообщений: 42
17.03.2018, 16:46
Могу вот такое решение предложить

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
N='(([[{}]]))()'
print (N)
 
M={'(':')','[':']','{':'}'}
stack=[]
flag=0
 
for i in N:
    if i=='(' or i=='[' or i=='{': stack.append(i)
    if (i==')' or i==']' or i=='}') and (len(stack)==0 or i!=M[stack[(len(stack)-1)]]):
        flag=1
        break
    if (i==')' or i==']' or i=='}') and i==M[stack[(len(stack)-1)]]:
        stack.pop()
        continue
    
 
if flag==1 or len(stack)>0:
    print ("Неправильная последовательность скобок")
else:
    print ("Правильная последовательность скобок")
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.03.2018, 17:09
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
N='[([[{}]]])'
print (N)
 
M={'(':')','[':']','{':'}'}
stack=[]
for i in N:
    if i in ('(', '[', '{'):
        stack.append(i)
    elif i == M[stack[-1]]:
        stack.pop()
    else:
        print ("Неправильная последовательность скобок")
        break
 
if len(stack)>0:
    print ("Неправильная последовательность скобок")
else:
    print ("Правильная последовательность скобок")
0
20 / 12 / 6
Регистрация: 17.03.2018
Сообщений: 42
17.03.2018, 17:37
Рыжий Лис,
не работает, проверь на [[[{}]]])
хотя согласен, код можно (и нужно) оптимизировать, но уже лень


Добавлено через 1 минуту
Вот еще решение, код короче, но работать будет дольше

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
N='((([[[[()[]]]{}]{}])))'
print (N)
 
N1=N
flag=0
 
while N1:
    lenstart=len(N1)
    N1=N1.replace('()','')
    N1=N1.replace('[]','')
    N1=N1.replace('{}','')
    if len(N1)==lenstart:
        flag=1
        break
 
if flag==1:
    print ("Неправильная последовательность скобок")
else:
    print ("Правильная последовательность скобок")
0
 Аватар для FilArt97
37 / 36 / 16
Регистрация: 11.03.2018
Сообщений: 95
17.03.2018, 18:43
Python
1
2
3
4
5
6
def check(seq):
    i = 0
    while seq and i < 1000:
        seq = seq.replace('[]', '').replace('{}', '').replace('()', '')
    i += 1
    return False if seq else True
Все остальное за вами. Cчетчик для простоты добавил
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.03.2018, 18:52
FilArt97, оно зациклится.
0
 Аватар для FilArt97
37 / 36 / 16
Регистрация: 11.03.2018
Сообщений: 95
17.03.2018, 18:56
Вместо and должно быть or, да
0
20 / 12 / 6
Регистрация: 17.03.2018
Сообщений: 42
17.03.2018, 20:29
FilArt97,
как раз с or зациклится
счетчик нужно подвинуть внутрь цикла
за 1 секунду не уложится
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2018, 20:29
Помогаю со студенческими работами здесь

Используя стек, проверить, является ли правильной скобочная последовательность
Используя стек, проверить, является ли правильной скобочная последовательность, в которую входят скобки трех типов: , { }, . Формат...

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

Определить, является ли данная скобочная последовательность правильной
Рассмотрим последовательность, состоящую из круглых, квадратных и фигурных скобок. Программа должна определить, является ли данная...

Является ли входная последовательность правильной
1) На вход программы дается строку (и). последовательного ность считается правильной, если она содержит одинаковые количества символов...

Определить, является ли последовательность правильной
Помогите пожалуйста, правильно написать эту последовательность... Я не могла понять, как должен выглядеть код:cry: Заранее спасибо!!!


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru