📅  最后修改于: 2023-12-03 15:37:16.165000             🧑  作者: Mango
该问题要求我们检查一个由空括号('()', '[]', '{}')组成的字符串是否符合配对原则。也就是说,所有的开括号都必须与相应的闭括号匹配。
我们可以使用一个栈来解决该问题。当读取到一个开括号时,我们将其放入栈中,并继续读取下一个字符。当读取到一个闭括号时,我们将栈顶元素弹出(如果栈不为空),并检查是否与当前闭括号匹配。如果匹配,我们将继续读取下一个字符; 否则我们可以停止,因为该字符串不符合配对规则。
以下是基于此策略的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
我们可以看到,第一个例子中的字符串是有效的,因为每个开括号都有相应的闭括号。第二个字符串无效,因为右方括号没有相应的左方括号。