Search

Longest Valid Parentheses

Updated: Apr 6, 2021

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:


class Solution {
    public int longestValidParentheses(String s) {
        if(s==null || s.length() == 0)
            return 0;
        
        Stack<Integer> stack = new Stack<>();
        for(int i=0;i<s.length();i++)
        {
            if(!stack.isEmpty() && s.charAt(i)==')' && s.charAt(stack.peek())=='(')
                stack.pop();
            else stack.push(i);
        }
        int index=-1;
        int max=0;
        for(int i:stack)
        {
            max=Math.max(max,i-index-1);
            index=i;
        }
        max=Math.max(max,s.length()-index-1);
        return max;
        
    }
}


65 views0 comments

Recent Posts

See All

A string s is called good if there are no two different characters in s that have the same frequency. Given a string s, return the minimum number of characters you need to delete to make s good. The f

The numeric value of a lowercase character is defined as its position (1-indexed) in the alphabet, so the numeric value of a is 1, the numeric value of b is 2, the numeric value of c is 3, and so on.