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;
}
}
Comments