📜  Python – 匹配括号对(1)

📅  最后修改于: 2023-12-03 14:46:09.597000             🧑  作者: Mango

Python - 匹配括号对

在编程中,经常需要检查代码中的括号是否匹配,否则会导致语法错误或运行时错误。本文将介绍在Python中如何匹配括号对。

1. 使用栈(Stack)进行匹配

栈的原理是先进后出(Last In First Out, LIFO),在检查括号匹配时,我们可以使用一个栈来存储左括号,并在遍历时检查右括号是否与栈顶的左括号匹配。如果匹配,则弹出左括号,否则返回False。

def isValid(s: str) -> bool:
    stack = []
    mapping = {")": "(", "}": "{", "]": "["}
    for char in s:
        if char in mapping:
            top_element = stack.pop() if stack else "#"
            if mapping[char] != top_element:
                return False
        else:
            stack.append(char)
    return not stack
2. 使用递归(Recursion)进行匹配

除了使用栈外,还可以使用递归来检查括号是否匹配。对于给定的字符串,我们可以使用两个变量来追踪左右括号的数量。在遍历字符串时,如果出现左括号,则左括号计数器加1,如果出现右括号,则右括号计数器加1。如果右括号计数器大于左括号计数器,则返回False。如果字符串遍历完后左右括号计数器相等,则返回True,否则返回False。

def isValid(s: str) -> bool:
    def helper(s, left_count, right_count):
        if right_count > left_count:
            return False
        if not s:
            return left_count == right_count
        if s[0] == "(":
            return helper(s[1:], left_count + 1, right_count)
        elif s[0] == ")":
            return helper(s[1:], left_count, right_count + 1)
        else:
            return helper(s[1:], left_count, right_count)
    return helper(s, 0, 0)
3. 总结

在Python中,栈和递归都可以用来检查括号是否匹配。使用栈比递归更易于理解,但可能需要更多的空间。使用递归需要更少的空间,但需要更多的代码实现。无论哪种方法,都需要掌握栈和递归的基本原理,才能编写出高效可靠的代码。