普通括号匹配
python
# 括号匹配
def bracket_matching(ans):
stack = []
flag = True
left = ['(', '{', '[']
right = [')', '}', ']']
for i in range(len(ans)):
if ans[i] in left:
stack.append(ans[i])
else:
tmp = stack.pop()
if left.index(tmp) != right.index(ans[i]):
flag = False
if stack:
flag = False
return flag
print(bracket_matching('({})()[[]'))
print(bracket_matching('({})()[[]]'))
False
True
最长有效括号匹配
python
def longestValidParentheses(s):
maxlen = 0
stack = []
for i in range(len(s)):
if s[i] == '(':
stack.append(s[i])
if s[i] == ')' and len(stack) != 0:
stack.pop()
maxlen += 2
return maxlen
print(longestValidParentheses('( ) ( ( ) '))
4
最长括号匹配
python
def GetLongestParentheses(s):
maxlen = 0
start = -1
stack = []
for i in range(len(s)):
if s[i]=='(':
stack.append(i)
else:
if not stack:
start = i
else:
stack.pop()
if not stack:
maxlen = max(maxlen, i-start)
else:
maxlen = max(maxlen, i-stack[-1])
return maxlen
print(GetLongestParentheses('()(()'))
print(GetLongestParentheses('()(()))'))
print(GetLongestParentheses(')()())'))
结果:
2
6
4