[LeetCode] Longest Valid Parentheses 解题报告

来源:互联网 发布:淘宝店旺铺是什么 编辑:程序博客网 时间:2024/06/05 03:53

原题链接

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.

思路

建一个栈,记录上一个左括号的位置指针:遇到左括号就压栈,遇到右括号时检测栈里是不是非空的。如果非空,那就弹出一个并记录当前“有效段”长度;若是空的,说明当前这个右括号非法,意味着“有效段”到此为止了,更新pBegin(它指向“有效段”的第一个左括号)。

代码

class Solution {public:    int longestValidParentheses(string s) {        const char* str=s.c_str(),*pbegin=str;        int maxlen=0;        vector<const char*> sta;        for (const char* p=str;*p;p++) {            if (*p=='(') {                sta.push_back(p);            } // ')'            else {                if (sta.size()>0) {                    sta.pop_back();                    int len;                    if (sta.size()>0) len=p-sta.back();                    else len=p-pbegin+1;                    maxlen=len>maxlen?len:maxlen;                }                else {                    pbegin=p+1;                }            }        }        return maxlen;    }};
0 0
原创粉丝点击