给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"
解题思路
class Solution(object):
def longestValidParentheses(self, s):
"""
:type s: str
:rtype: int
用栈模拟一遍,将匹配的括号的位置全部置1,经过处理后,此题变为寻找最长的连续的0的长度
"""
if len(s)==0 or len(s)==1:
return 0
dp = [0] * len(s)
stack = []
for idx, num in enumerate(s):
if num=='(':
stack.append(idx)
elif num==')' and stack!=[]:
stack.pop()
else:
dp[idx] = 1
while stack!=[]:
dp[stack[-1]] = 1
stack.pop()
max_len = 0
cnt = 0
for i in range(len(s)):
if dp[i]==1:
cnt = 0
continue
else:
cnt += 1
max_len = max(cnt, max_len)
return max_len
class Solution:
def longestValidParentheses(self, s: str) -> int:
length = len(s)
if length==0:
return 0
dp = [0] * length
for i in range(1, length):
if s[i]==')':
pre = i - dp[i-1] - 1
if pre>=0 and s[pre]=='(':
dp[i] = dp[i-1] + 2
if pre>0:
dp[i] += dp[pre-1]
return max(dp)