dp:
class Solution {
public:
int longestValidParentheses(string s) {
int n = s.size();
vector<int> dp(n + 1, 0);
int maxcnt = 0;
for (int i = 1; i < n; ++i) {
if (si == ')') {
if (si-1 == '(')
dpi = (i >= 2 ? dpi - 2 : 0)+2;
else {
int pos = i - dpi - 1 - 1; //'('
if (pos >= 0 && spos == '(') {
dpi = dpi - 1 + 2 + (pos >= 1 ? dppos - 1 : 0);//加上前面的
}
}
}
maxcnt = max(maxcnt, dpi);
}
return maxcnt;
}
};
lr:
class Solution {
public:
int longestValidParentheses(string s) {
int l = 0, r = 0, n = s.size();
int maxcnt = 0;
for (int i = 0; i < n; ++i) {
if (si == '(')
++l;
else
++r;
if (l == r)
maxcnt = max(maxcnt, l + r);
else if (r > l)
l = 0, r = 0;
}
l = 0, r = 0;
for (int i = n - 1; i > 0; --i) {
if (si == ')')
++l;
else
++r;
if (l == r)
maxcnt = max(maxcnt, l + r);
else if (r > l)
l = 0, r = 0;
}
return maxcnt;
}
};
双指针:
class Solution {
public:
int longestValidParentheses(string s) {
stack<int> st;
int n = s.size();
int maxcnt = 0;
st.push(-1);
for (int i = 0; i < n; ++i) {
if (si == '(') {
st.push(i);
} else {
st.pop();
if (st.empty())
st.push(i);
else
maxcnt = max(maxcnt, i - st.top());
}
}
return maxcnt;
}
};