Longest Valid Parentheses LeetCode Solution

Last updated on October 10th, 2024 at 02:05 am

Here, We see Longest Valid Parentheses LeetCode Solution. This Leetcode problem is done in many programming languages like C++, Java, JavaScript, Python, etc., with different approaches.

List of all LeetCode Solution

Topics

Dynamic Programming, Stack, String

Level of Question

Hard

Longest Valid Parentheses LeetCode Solution

Longest Valid Parentheses LeetCode Solution

Problem Statement

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

1. Longest Valid Parentheses Leetcode Solution C++

class Solution {
public:
    int longestValidParentheses(string s) {
	stack<int> opens;
	for(int i = 0; i < s.size(); i++) {
		if(s[i] == '(') opens.push(i);
		else if(opens.size()) {
			s[opens.top()] = s[i] = '*';
			opens.pop();
		}
	}
	int curr = 0, res = 0;
	for(int i = 0; i <= s.size(); i++) {
		if(s[i] == '*') curr++;
		else {
			res = max(res, curr);
			curr = 0;
		}
	}
	return max(curr, res);        
    }
};

2. Longest Valid Parentheses Leetcode Solution Java

class Solution {
    public int longestValidParentheses(String s) {
        LinkedList<Integer> stack = new LinkedList<>();
        int result = 0;
        stack.push(-1);
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == ')' && stack.size() > 1 && s.charAt(stack.peek()) == '(') {
                stack.pop();
                result = Math.max(result, i - stack.peek());
            } else {
                stack.push(i);
            }
        }
        return result;     
    }
}

3. Longest Valid Parentheses Leetcode Solution JavaScript

var longestValidParentheses = function(s) {
    let stack = [-1], ans = 0
    for (let i = 0; i < s.length; i++)
        if (s[i] === '(') stack.push(i)
        else if (stack.length === 1) stack[0] = i
        else stack.pop(), ans = Math.max(ans, i - stack[stack.length-1])
    return ans    
};

4. Longest Valid Parentheses Leetcode Solution Python

class Solution(object):
    def longestValidParentheses(self, s):
        stack = [-1]
        max_length = 0
        for cur_idx, char in enumerate(s):
            if char == '(':
                stack.append( cur_idx )
            else:
                stack.pop()
                if not stack:
                    stack.append( cur_idx )
                else:
                    max_length = max(max_length, cur_idx - stack[-1])
        return max_length
Scroll to Top