32. Longest Valid Parentheses

Hard


Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.

Example 1:

Input: s = "(()"
Output: 2
Explanation: The longest valid parentheses substring is "()".

Example 2:

Input: s = ")()())"
Output: 4
Explanation: The longest valid parentheses substring is "()()".

Example 3:

Input: s = ""
Output: 0

Constraints:

  • 0 <= s.length <= 3 * 104

  • s[i] is '(', or ')'.

Solution 1

class Solution:
    def longestValidParentheses(self, s: str) -> int:
        stack = [-1]
        length = 0
        for index, char in enumerate(s):
            if char == "(":
                stack.append(index)
            else:
                stack.pop()
                if not stack:
                    stack.append(index)
                else:
                    length = max(length, index - stack[-1])
        return length

Solution 2

class Solution:
    def longestValidParentheses(self, s: str) -> int:
        self.length = 0
        left, right = 0, 0
        for char in list(s):
            if char == '(':
                left += 1
            else:
                right += 1
            if left == right:
                self.length = max(self.length, 2*left)
            elif right > left:
                left, right = 0,0
                
        left, right = 0, 0
        for char in list(s[::-1]):
            if char == '(':
                left += 1
            else:
                right += 1
            if left == right:
                self.length = max(self.length, 2*left)
            elif left > right:
                left, right = 0,0
        return self.length
 

Last updated