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.
使用栈
class Solution {
public:
int longestValidParentheses(string s) {
int maxLen = 0;
int last = -1;
stack<int> p;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(') {
p.push(i);
} else {
if (p.empty()) {
last = i;
} else {
p.pop();
if (p.empty()) {
maxLen = max(maxLen, i - last);
} else {
maxLen = max(maxLen, i - p.top());
}
}
}
}
return maxLen;
}
};
两遍遍历,节省空间
class Solution {
public:
int longestValidParentheses(string s) {
int maxLen = 0;
int start = -1;
int match = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(') {
match++;
} else {
match--;
if (match<0) {
start = i;
match = 0;
} else if (match == 0) {
maxLen = max(maxLen, i - start);
}
}
}
match = 0;
start = s.size();
for (int i = start-1; i>=0; i--) {
if (s[i] == ')') {
match++;
} else {
match--;
if (match<0) {
start = i;
match = 0;
} else if (match == 0) {
maxLen = max(maxLen, start - i);
}
}
}
return maxLen;
}
};