📅  最后修改于: 2023-12-03 15:12:46.778000             🧑  作者: Mango
门|门 IT 2007
问题 15这是 门|门 IT 2007
的第15个问题,是一个典型的编程题目,需要用程序实现具体算法,求解问题的答案。
给定一个字符串,由 '('
、')'
、'['
、']'
、'{'
和 '}'
六种符号组成,判断该字符串是否是合法的括号序列。要求左括号必须用相同类型的右括号闭合,左括号必须以正确的顺序闭合。
以下情况均认为是非法括号序列:
'[(])'
'[)]'
'()'
以下情况认为是合法括号序列:
''
'[]'
'()[]{}'
这是一个经典的栈的应用问题。从左到右扫描字符串,如果当前字符是左括号,则将其入栈。如果当前字符是右括号,则弹出栈顶元素,如果栈顶元素不是同类型的左括号,或者栈为空,则该字符串非法。当字符串扫描完毕后,如果栈为空,则为合法的括号序列。
以下是用 Python 实现该算法的示例代码:
def is_valid_parentheses(s: str) -> bool:
hash_map = {')': '(', ']': '[', '}': '{'}
stack = []
for c in s:
if c in hash_map:
if not stack or stack.pop() != hash_map[c]:
return False
else:
stack.append(c)
return not stack
该算法可以在线性时间复杂度内解决问题。