Back to questions
Рунити
Middle
2
Необходимо провалидировать структуру ТОЛЬКО на корректность открытия и закрытия скобок. test_data = [ "[][][]", # valid "[[[]]]", # valid "[]", # valid "][[", # invalid "[[]", # invalid "[]]", # invalid "[[]]", # invalid "][[]", # invalid "[][]]", # invalid "[]][", # invalid ] def is_valid():
Companies where asked
Answer from AI
sobes.tech AI
Для проверки корректности открытия и закрытия скобок можно использовать простой стек. При проходе по строке:
- Если встречается открывающая скобка
[, кладём её в стек. - Если встречается закрывающая скобка
], проверяем, есть ли в стеке соответствующая открывающая. Если нет — строка некорректна.
В конце стек должен быть пустым, иначе есть незакрытые скобки.
Пример реализации:
def is_valid(s: str) -> bool:
stack = []
for char in s:
if char == '[':
stack.append(char)
elif char == ']':
if not stack:
return False
stack.pop()
return len(stack) == 0
# Проверка тестовых данных
test_data = [
"[][][]", # valid
"[[[]]]", # valid
"[]", # valid
"][[", # invalid
"[[]", # invalid
"[]]", # invalid
"[[]]", # valid
"][[]", # invalid
"[][]]", # invalid
"[]][", # invalid
]
for s in test_data:
print(f"{s}: {is_valid(s)}")
Обратите внимание, что в исходном списке "[[]]" помечен как invalid, но по логике скобки там корректно открыты и закрыты, значит это valid.