32. Longest Valid Parentheses

Posted ymjyqsx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了32. Longest Valid Parentheses相关的知识,希望对你有一定的参考价值。

https://www.cnblogs.com/grandyang/p/4424731.html

这个题求的是最长的连续匹配正确的符号

匹配错误只可能是右括号‘)‘存在时,堆中没有左括号‘(‘进行匹配

start用来继续这个连续匹配的开始位置,只有在匹配错误的情况下,这个start才更新

如果匹配成功后,堆中没有左括号‘(‘,则说明从start到当前都是匹配正确了的;

注意必须用i - position.top(),可能出现这种情况‘(()()‘,如果你使用i - position弹出的那个位置,你永远只可能获得长度为2的,不可能获得连续的长度

 

class Solution {
public:
    int longestValidParentheses(string s) {
        int start = 0,res = 0;
        stack<int> position;
        for(int i = 0;i < s.size();i++){
            if(s[i] == ()
                position.push(i);
            else if(s[i] == )){
                if(position.empty())
                    start = i + 1;
                else{
                    position.pop();
                    res = position.empty() ? max(res,i - start +  1) : max(res,i - position.top());
                }
            }
        }
        return res;
    }
};

 

以上是关于32. Longest Valid Parentheses的主要内容,如果未能解决你的问题,请参考以下文章

32. Longest Valid Parentheses

32. Longest Valid Parentheses

32. Longest Valid Parentheses *HARD*

32. Longest Valid Parentheses

32. Longest Valid Parentheses

32. Longest Valid Parentheses