原题链接:https://oj.leetcode.com/problems/longest-valid-parentheses/
这道题的做法也是保持一个栈,做法其实和20 - Valid Parentheses类似。但是不同点是,要不断的跟踪当前最大的长度,所以必须将当前index信息也保存起来,这样的话可以使用2个栈,一个栈放char,一个栈放index。但是有什么方法可以存放2种信息呢,指针!使用指向char的指针,可以完美的使用1个栈就足够了。
class Solution {
public:
int longestValidParentheses(string s) {
stack<const char *> stk;
int longest = 0;
const char *str = s.c_str();
const char *cur = str;
while (*cur != '\0') {
if (*cur == '(') {
stk.push(cur);
} else if (*cur == ')') {
if (!stk.empty() && *stk.top() == '(') {
stk.pop();
if (!stk.empty()) {
longest = max(longest, (int)(cur - stk.top()));
} else {
longest = max(longest, (int)(cur - str + 1));
}
} else {
stk.push(cur);
}
}
cur++;
}
return longest;
}
};