publicclass Solution {
publicintlongestValidParentheses(String s) {
if(s == null || s.length() <=1) {
return0;
}
int[] f = newint[s.length()];
int max = 0;
for(int i =1 ; i < s.length(); i++) {
if(s.charAt(i) == ')' && i-f[i-1] -1 >=0 && s.charAt(i-f[i-1]-1) == '(') {
f[i] = f[i-1]+2 + ((i-f[i-1]-2)>=0?f[i-f[i-1]-2]: 0);
max = Math.max(max,f[i]);
}
}
return max;
}
}
class Solution {
public:
int longestValidParentheses(string s) {
int n = s.length(), longest = 0;
stack<int> st;
for (int i = 0; i < n; i++) {
if (s[i] == '(') st.push(i);
else {
if (!st.empty()) {
if (s[st.top()] == '(') st.pop();
else st.push(i);
}
else st.push(i);
}
}
if (st.empty()) longest = n;
else {
int a = n, b = 0;
while (!st.empty()) {
b = st.top(); st.pop();
longest = max(longest, a-b-1);
a = b;
}
longest = max(longest, a);
}
return longest;
}
};