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

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

16.03.2018, 19:14. Показов 43630. Ответов 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,763
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
 Аватар для Рыжий Лис
5972 / 3734 / 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
 Аватар для Рыжий Лис
5972 / 3734 / 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
 Аватар для Рыжий Лис
5972 / 3734 / 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
 Аватар для Рыжий Лис
5972 / 3734 / 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
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru