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;
}
};
本文介绍了一种使用栈解决寻找字符串中有效括号子串长度最大值的方法,包括两种实现方式:一种是常规的栈操作,另一种是两次遍历优化空间复杂度。

被折叠的 条评论
为什么被折叠?



