📅  最后修改于: 2023-12-03 15:40:36.357000             🧑  作者: Mango
在编程中,我们经常需要检查一个字符串中包含的括号是否合法。如果没有正确匹配的括号,就会导致语法错误。因此,我们需要一个算法来检查给定的字符串是否可以转换为平衡括号序列。
我们使用栈来实现该算法。遍历字符串,如果遇到左括号,将其推入栈中;如果遇到右括号,弹出栈顶元素。如果弹出的元素不是对应的左括号,或者栈为空,说明该字符串不是合法的平衡括号序列。
如果字符串遍历完成后,栈为空,则说明该字符串是一个合法的平衡括号序列。
def is_balanced_parenthesis(s):
stack = []
for c in s:
if c == '(' or c == '[' or c == '{':
stack.append(c)
elif c == ')' or c == ']' or c == '}':
if len(stack) == 0:
return False
last_c = stack.pop()
if (c == ')' and last_c != '(') or \
(c == ']' and last_c != '[') or \
(c == '}' and last_c != '{'):
return False
return len(stack) == 0
该算法的时间复杂度是$O(n)$,其中$n$是字符串的长度。因为每个字符只会被遍历一次,并且每个字符最多被压入和弹出栈一次。空间复杂度是$O(n)$,因为最坏情况下,栈的大小会达到字符串的长度。
这个算法简单易懂,运行效率高,可以用于检查某个字符串是否可以转换为平衡括号序列。