📅  最后修改于: 2023-12-03 15:42:10.691000             🧑  作者: Mango
该问题是GATE CS 1997年的问题25。这是一个经典的计算机科学问题,根据条件判断一个字符串是否是有效的括号序列(例如,{},[],()等等)。
给定一个只包含字符{,},[,]和(,)的字符串,判断它是否是有效的括号序列。一个有效的括号序列定义如下:
例如,{},[],()是有效的括号序列,但是{[)]是无效的。
该问题可以使用堆栈来解决。
我们遍历给定的字符串,对于每个左括号,将其推入堆栈中。对于每个右括号,我们将检查堆栈的顶部是否与相应的左括号匹配。如果是,我们将堆栈弹出,否则该字符串无效。如果我们已经遍历完了整个字符串,并且堆栈为空,则该字符串有效,否则无效。
下面是该问题的解决方案的Python代码:
def is_valid_parenthesis(string):
stack = []
for char in string:
if char in ['(', '[', '{']:
stack.append(char)
else:
if not stack:
return False
if char == ')' and stack[-1] != '(':
return False
if char == ']' and stack[-1] != '[':
return False
if char == '}' and stack[-1] != '{':
return False
stack.pop()
return not stack
该算法的时间复杂度为O(n),其中n是字符串的长度,因为我们只需遍历一次字符串。
该算法的空间复杂度为O(n),因为最坏的情况下,我们需要存储所有左括号。
该问题是经典的计算机科学问题。我们可以使用一个简单的堆栈算法来解决它。该算法的时间复杂度为O(n),其中n是字符串的长度,空间复杂度为O(n)。