1 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊
這是一個(gè)堆棧問題。幸運(yùn)的是,默認(rèn)情況下列表作為堆棧工作。
def check(s):
"""
>>> check("{(<[testdata])>}")
False
>>> check("{just{test<of>Unbalanced}String')")
False
>>> check("{(<[ABalancedExample]>)}")
True
"""
bracket_matches = {
'[': ']',
'(': ')',
'<': '>',
'{': '}',
}
opening = set(bracket_matches.keys())
closing = set(bracket_matches.values())
stack = []
for ch in s:
if ch in opening:
stack.append(bracket_matches[ch])
continue
if ch in closing:
try:
if ch == stack.pop():
continue
else:
return False
except IndexError:
# stack is empty
return False
return stack == []
請(qǐng)注意,如果您需要允許不匹配的右括號(hào),只要其余的括號(hào)仍然平衡,這就不夠了,例如,包括以下測(cè)試會(huì)使此功能不兼容:
>>> check("{{<[test}data]>}}")
添加回答
舉報(bào)