📌  相关文章
📜  教资会网络 | UGC NET CS 2015 年 6 月 – III |问题 41(1)

📅  最后修改于: 2023-12-03 15:26:03.245000             🧑  作者: Mango

教资会网络 | UGC NET CS 2015 年 6 月 – III |问题 41

简介

本题涉及计算机科学中最基本的数据结构之一——栈。栈是一种先进后出(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)

总结

本题介绍了栈这种基本的数据结构,并通过一个具体的问题展示了其用法和优劣。对于栈这种数据结构,掌握好它的基本操作和特性,对于计算机科学相关工作和学科研究都是非常重要的。