📅  最后修改于: 2023-12-03 15:26:03.245000             🧑  作者: Mango
本题涉及计算机科学中最基本的数据结构之一——栈。栈是一种先进后出(LIFO)的数据结构,可以用数组或链表实现。栈通常有两个基本操作:入栈(push)和出栈(pop)。
给定一个字符串,判断其中的括号是否匹配。括号包括 ()[]{}
,其中 (
与 )
匹配,[
与 ]
匹配,{
与 }
匹配。例如,字符串 ([])
中的括号是匹配的,而字符串 [()]
就不是。如果字符串中出现了非括号字符,应当忽略它们。
要求使用栈来解决此问题。
def is_matching_parentheses(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
此代码的思路是遍历输入字符串中的每个字符。如果字符属于左括号集合,将其推入栈中。如果字符属于右括号集合,则检查栈顶元素是否与其匹配。匹配则弹出栈顶元素,继续遍历字符串;否则字符串无效,直接返回 False。如果在遍历完字符串后栈非空,则字符串无效,返回 False。
这个方法的时间复杂度是 O(n)
,其中 n
是字符串的长度。我们使用了一个栈来解决此问题,制定了一个映射,使得我们可以轻松地通过右括号找到左括号。如果输入字符串有效,则我们会在遍历完字符串后清空栈,所以空间复杂度是 O(n)
。
本题介绍了栈这种基本的数据结构,并通过一个具体的问题展示了其用法和优劣。对于栈这种数据结构,掌握好它的基本操作和特性,对于计算机科学相关工作和学科研究都是非常重要的。