括号匹配算法:判断括号序列是否合法

假设一个算术表达式中可以包含三种括号:圆括号'(' 和')',方括号'['和']'和花括号'{'和'}',且这三种括号可按任意的次序嵌套使用,如:[{}[]]。给定一个括号序列,请判定该括号序列是否合法。

解题思路:

  1. 判断括号序列的长度是否为偶数,如果不是偶数,则不合法。
  2. 遍历括号序列,遇到左括号就将其压入栈中,遇到右括号就从栈顶弹出一个左括号进行匹配。
  3. 如果栈顶元素与当前右括号匹配成功,则继续遍历下一个字符;否则,括号序列不合法,直接返回false。
  4. 遍历结束后,如果栈为空,则说明括号序列合法;否则,括号序列不合法。

代码实现:

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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录