题目描述(困难难度)
解题思路
- 第i个位置的最长有效括号等于它本身再加上i-2的位置上的最长有效括号数。
用例
s = “(()))())(”
dp = [0, 0, 2, 4, 0, 0, 2, 0, 0]
max(dp) = 4
python 代码
class Solution:
def longestValidParentheses(self, s: str) -> int:
if not s:
return 0
a = len(s)
dp = [0]*a
for i in range(a):
if i>0 and s[i] == ")":
if s[i-1]=="(":
dp[i] = dp[i-2] + 2
if s[i-1]==")" and s[i-dp[i-1]-1]=="(" and i - dp[i - 1] - 1>=0:
dp[i] = dp[i-1]+2 + dp[i-dp[i-1]-2]
return max(dp)
s = Solution()
result = s.longestValidParentheses("(()))())(")
print(result)
# [0, 0, 2, 4, 0, 0, 2, 0, 0]
# 4