Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring.
For “(()”, the longest valid parentheses substring is “()”, which has length = 2.
Another example is “)()())”, where the longest valid parentheses substring is “()()”, which has length = 4.
leetcod第32题,找出最长的有效括号的长度,这里使用dp算法,复杂度为O(n)
这里dp[i]代表以i为末尾的,最长有效括号长度。首先要明确,更新dp[i]只会在遇到右括号时发生。
另外,在不考虑边界条件的情况下,dp[i]的更新无非是距离它本身上一个最长有效括号长度位置的括号是否可以搭配,如果可以,dp[i]就在dp[i+1]的基础上要加2,表示延长了有效长度。另外还要向前看一下是否可以连起来[i-dp[i]]位置的最大长度。
class Solution:
def longestValidParentheses(self, s):
"""
:type s: str
:rtype: int
"""
n = len(s)
if n == 0:
return 0
dp = [0]*n
for i in range(n):
if s[i] == ")":
leap = i-1-dp[i-1]
if leap >= 0 and s[leap] == "(":
dp[i] = dp[i-1]+2
if i-dp[i] > 0:
dp[i] += dp[i-dp[i]]
print(dp)
return max(dp)