📌  相关文章
📜  国际空间研究组织 | ISRO CS 2020 |问题 21(1)

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

ISRO CS 2020 Problem 21

该问题要求我们检查一个由空括号('()', '[]', '{}')组成的字符串是否符合配对原则。也就是说,所有的开括号都必须与相应的闭括号匹配。

我们可以使用一个栈来解决该问题。当读取到一个开括号时,我们将其放入栈中,并继续读取下一个字符。当读取到一个闭括号时,我们将栈顶元素弹出(如果栈不为空),并检查是否与当前闭括号匹配。如果匹配,我们将继续读取下一个字符; 否则我们可以停止,因为该字符串不符合配对规则。

以下是基于此策略的Python代码:

def is_valid(string: str) -> bool:
    stack = []
    p_dict = {')': '(', ']': '[', '}': '{'}
    for char in string:
        if char in p_dict.values():
            stack.append(char)
        elif char in p_dict.keys():
            if not stack or p_dict[char] != stack.pop():
                return False
    return not stack

此函数使用一个名为 stack 的列表来实现我们的栈,以及一个名为 p_dict 的字典来存储每个闭括号与其相应的开括号。该函数返回 True 如果栈为空,即所有开括号都有相应的闭括号,否则返回 False

以下是一个实例的使用:

>>> print(is_valid('()[]{}'))
True
>>> print(is_valid('()[{]}'))
False

我们可以看到,第一个例子中的字符串是有效的,因为每个开括号都有相应的闭括号。第二个字符串无效,因为右方括号没有相应的左方括号。