leetcode 32.最长有效括号(python)
给定一个只包含 '('
和 ')'
的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"
动态规划
class Solution(object):
def longestValidParentheses(self, s):
# 1.动态规划
# 状态转移方程:
# dp[i] = 2 + dp[i - 1] + dp[i - dp[i - 1] - 2]
n = len(s)
if n == 0:
return 0
dp = [0] * n
for i in range(n):
left_sign = i - dp[i - 1] - 1
if s[i] == ')' and left_sign >= 0 and s[left_sign] == '(':
dp[i] = 2 + dp[i - 1] + dp[i - dp[i - 1] - 2]
return max(dp)
栈
class Solution(object):
def longestValidParentheses(self, s):
stack = [-1]
length = 0
max_length = 0
for i in range(len(s)):
if s[i] == '(':
stack.append(i)
else:
stack.pop()
if stack == []:
stack.append(i)
else:
length = i - stack[-1]
max_length = max(max_length, length)
return max_length