括号匹配算法:判断括号序列是否合法
括号匹配算法:判断括号序列是否合法
假设一个算术表达式中可以包含三种括号:圆括号'(' 和')',方括号'['和']'和花括号'{'和'}',且这三种括号可按任意的次序嵌套使用,如:[{}[]]。给定一个括号序列,请判定该括号序列是否合法。
解题思路:
- 判断括号序列的长度是否为偶数,如果不是偶数,则不合法。
- 遍历括号序列,遇到左括号就将其压入栈中,遇到右括号就从栈顶弹出一个左括号进行匹配。
- 如果栈顶元素与当前右括号匹配成功,则继续遍历下一个字符;否则,括号序列不合法,直接返回false。
- 遍历结束后,如果栈为空,则说明括号序列合法;否则,括号序列不合法。
代码实现:
def is_valid(s: str) -> bool:
stack = []
for c in s:
if c in '({[':
stack.append(c)
else:
if not stack:
return False
if c == ')' and stack[-1] == '(':
stack.pop()
elif c == ']' and stack[-1] == '[':
stack.pop()
elif c == '}' and stack[-1] == '{':
stack.pop()
else:
return False
return not stack
print(is_valid('()[]{}')) # True
print(is_valid('([{}])')) # True
print(is_valid('({[}])')) # False
print(is_valid('([)]')) # False
原文地址: https://www.cveoy.top/t/topic/ntMo 著作权归作者所有。请勿转载和采集!