如何在带有混合括号(包括开括号和闭括号)的字符串中找到(
至)
与[
至]
之间的最大距离差。 / p>
例如:
s = '()[(([]))]([[]])'
len_diff(s, '()') # -> 6 As s =
# () [(([]))] ([[]])
# ^ ^ ^ ^
len_diff(s, '[]') # -> 8 As s =
# () [(([]))] ([[]])
# ^ ^
允许任何类型的嵌套括号,并且输入始终有效。
答案 0 :(得分:2)
解决此问题的一种方法是使用堆栈。当您看到一个圆括号时,将其推入堆栈,而当您看到一个圆括号时,则将堆栈弹出。只要堆栈不为空,就可以继续计算从字符串中读取的字符数。一旦堆栈变空,您就可以测试这是否是最大距离,并更新您的max_length
变量。或者,也可以通过评论中提到的递归来完成。
def len_diff(s, paren_type='()'):
stack = []
length = 0
max_length = 0
# Good to add checks here on length of paren_type
open_paren = paren_type[0]
close_paren = paren_type[1]
for c in s:
if c == open_paren:
stack.append(c)
elif c == close_paren:
stack.pop()
if len(stack) == 0:
if length > max_length:
max_length = length + 1
length = 0 # reset the counter for next paren
else:
# we only want to start counting after seeing at least
# one open paren, i.e. when the stack is not empty
length += 1
return max_length