您的位置:首页 > 其它

[Leetcode] 32 - Longest Valid Parentheses

2015-01-29 17:08 309 查看
原题链接: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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: