📅  最后修改于: 2023-12-03 14:46:09.597000             🧑  作者: Mango
在编程中,经常需要检查代码中的括号是否匹配,否则会导致语法错误或运行时错误。本文将介绍在Python中如何匹配括号对。
栈的原理是先进后出(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
除了使用栈外,还可以使用递归来检查括号是否匹配。对于给定的字符串,我们可以使用两个变量来追踪左右括号的数量。在遍历字符串时,如果出现左括号,则左括号计数器加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)
在Python中,栈和递归都可以用来检查括号是否匹配。使用栈比递归更易于理解,但可能需要更多的空间。使用递归需要更少的空间,但需要更多的代码实现。无论哪种方法,都需要掌握栈和递归的基本原理,才能编写出高效可靠的代码。