Как понять, правильно ли пользователь расставил скобки?
У нас есть выражение, которое содержит скобки и знаки математических операций. Нас интересует один вопрос: правильно ли расставлены скобки? Скобки у нас бывают трех видов: "" "()" и "[]". Каждая открытая скобка должна закрываться скобкой того же вида. Кроме того, участки, ограниченные скобками, не должны пересекаться, хотя и могут содержаться один в другом. ([)] - НЕПРАВИЛЬНО! ([]) - правильно.
q = dict(zip("})]", "{(["))
def check(s):
st = []
for c in s:
if c in "({[":
st.append(c)
elif c in "})]":
if not st:
return False
elif st[-1] != q[c]:
return False
else:
st.pop()
return len(st) == 0
def isValid(s: str) -> bool:
stack = []
closeToOpen = {')':'(',']':'[','}':'{'}
for c in s:
if c in closeToOpen:
if stack and stack[-1] == closeToOpen[c]:
stack.pop()
else:
return False
else:
stack.append(c)
return True if not stack else False
lirostin, это ровно тоже самое, за исключением того, что у тебя в строке не подразумеваются другие символы кроме скобок
Ну и конструкции типа return True if X else False лучше-таки приводить return bool(X)
А также, создание заведомо статического словаря лучше вынести из функции, чтобы не создавать его зря каждый раз. Но это уже мелочи