000032-Longest-Valid-Parentheses
Problem
https://leetcode.com/problems/longest-valid-parentheses/description/
Given a string containing just the characters '(' and ')', return 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
using stack to keep track index of every '('
class Solution:
def longestValidParentheses(self, s: str) -> int:
max_len = 0
# init with a start index
stack = [-1]
for idx in range(len(s)):
# when encounter of '(', put index into stack, keep track of index of '('
if s[idx] == '(':
stack.append(idx)
else:
# when encounter ')', pop out top index
stack.pop()
# if stack is empty (notice already init -1), indicates no valid cases at this point, continue
if not stack:
stack.append(idx)
else: # if stack not empty, keep tracking max_length of the valid cases
max_len = max(max_len, idx - stack[-1])
return max_len
Last updated
Was this helpful?