给定字符串,仅包含左括号’(‘和右括号’)’,它可能不是括号匹配的,设计算法,找出最长匹配的括号子串,返回该子串的长度。
如:”(()”: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))