查找括号之间的最大长度

时间:2018-09-16 06:22:04

标签: python string python-3.x substring

如何在带有混合括号(包括开括号和闭括号)的字符串中找到()[]之间的最大距离差。 / p>

例如:

s = '()[(([]))]([[]])'

len_diff(s, '()') # -> 6 As s = 
                              # ()   [(([]))]   ([[]])
                              #       ^    ^    ^    ^

len_diff(s, '[]') # -> 8 As s = 
                              # ()   [(([]))]   ([[]])
                              #      ^      ^

允许任何类型的嵌套括号,并且输入始终有效

1 个答案:

答案 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