连续最长括号匹配

给定字符串,仅包含左括号’(‘和右括号’)’,它可能不是括号匹配的,设计算法,找出最长匹配的括号子串,返回该子串的长度。
如:”(()”:2;”(()())”:6。

def longest_brackets_match(arr):
    deep,start=0,-1
    res=0
    for i in range(len(arr)):
        #遇到左括号,deep+1,否则遇到右括号,则dep-1且检测deep值
        if arr[i]=='(':
            deep+=1
        #arr[i]==")"
        else:
            deep-=1
            if deep==0:
                res=max(res,i-start)
            #此时右括号数目大于左括号,更新起点
            elif deep<0:
                deep=0
                start=i
    deep=0
    start=len(arr)
    for i in range(len(arr)-1,-1,-1):
        if arr[i]==')':
            deep+=1
        #arr[i]=="("
        else:
            deep-=1
            if deep==0:
                res=max(res,start-i)
            #此时右括号数目小于左括号,更新起点
            elif deep<0:
                deep=0
                start=i

    return res


a='(((()))(())'
b=')))))())()()()((('
print(longest_brackets_match(a))
print(longest_brackets_match(b))

猜你喜欢

转载自blog.csdn.net/weixin_42587961/article/details/81179133