如何使用Stack(栈)实现()、[]、{}三类括号的平衡与嵌套正确性校验
栈实现多类型括号校验函数
核心逻辑说明
- 先定义右括号到对应左括号的映射字典,无需编写多分支判断即可快速匹配括号对应关系,大幅减少冗余代码
- 用Python列表模拟栈结构,左括号直接入栈,遇到右括号就弹出栈顶左括号校验匹配关系
- 遍历过程中只要出现匹配失败、栈为空时仍遇到右括号的情况,直接返回False
- 遍历结束后必须栈为空才算全部匹配完成,否则说明存在未匹配的多余左括号
完整实现代码
def check_parentheses(s: str) -> bool: # 右括号到对应左括号的映射表 bracket_map = {')': '(', ']': '[', '}': '{'} stack = [] for char in s: # 跳过输入中的空格,适配带空格的测试用例 if char.isspace(): continue # 左括号直接入栈 if char in bracket_map.values(): stack.append(char) # 右括号做匹配校验 elif char in bracket_map: # 栈为空说明没有对应的左括号匹配,直接返回不合法 if not stack: return False # 弹出栈顶左括号,对比是否和当前右括号匹配 if stack.pop() != bracket_map[char]: return False # 遍历结束后栈为空才是完全合法 return len(stack) == 0
测试用例验证
你提供的所有测试用例运行后均会输出True:
print(check_parentheses("()")) print(check_parentheses("(()())")) print(not check_parentheses("(()))")) # Unbalanced print(not check_parentheses("((())")) # Unbalanced print(check_parentheses("({})")) #fick fel här print(not check_parentheses("({)}")) # Bad nesting print(check_parentheses("({} [()] ({}))")) print(not check_parentheses("({} [() ({)})")) # Unbalanced and bad nesting
内容的提问来源于stack exchange,提问作者Osmani
相关产品推荐
相关产品推荐

