Skip to content

32. Longest Valid Parentheses

Difficulty Topics

Description

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

longest-valid-parentheses.py
class Solution:
    def longestValidParentheses(self, s: str) -> int:
        n = len(s)
        opened = []
        mp = [False] * n

        for i, c in enumerate(s):
            if c == "(":
                opened.append(i)
            else:
                if opened:
                    mp[opened.pop()] = True
                    mp[i] = True

        res = total = i = 0
        while i < n:
            if i + 1 < n and mp[i] and mp[i+1]:
                total += 2
                i += 2
            else:
                total = 0
                i += 1

            res = max(res, total)

        return res