Given a string containing just the characters '('
and ')'
, find the length of the longest valid (well-formed) parentheses substring.
For "(()"
, the longest valid parentheses substring is "()"
, which has length = 2.
Another example is ")()())"
, where the longest valid parentheses substring is "()()"
, which has length = 4.
public int longestValidParentheses(String s) { int n = s.length(); Stack<Integer> stack = new Stack<>(); int len = 0; for(int i=0; i<n; i++) { char c = s.charAt(i); if(c == ')' && !stack.isEmpty() && s.charAt(stack.peek()) == '(') { stack.pop(); if(stack.isEmpty()) { len = i+1; } else { len = Math.max(len, i-stack.peek()); } } else { stack.push(i); } } return len; }
int longestValidParentheses(string s) { int res = 0; stack<int> st; for(int i=0; i<s.size(); i++) { if(!st.empty() && s[i]-s[st.top()] == 1) { st.pop(); int start = st.empty() ? -1 : st.top(); res = max(res, i-start); } else { st.push(i); } } return res; }