zoukankan      html  css  js  c++  java
  • Longest Valid Parentheses

    题目: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.

    思路:

    本题就是如果是“(”,进入堆栈,如果不是:

    看当前栈是否落空,落空就是从头计起,

    如果不是记录当前栈顶元素,并且出栈,如果栈为空,表示可以记录一下当前值,加上刚刚的accu值,这是因为可能出现()()的情况,所以加上accu;

    如果栈不为空,比如是(()所以就是i-j+1,当然这些都是要与之前的res取最大值。

    代码:

    class Solution {
    public:
        int longestValidParentheses(string s) {
            int res=0,first=0;
            stack<int>stk;
            for(int i=0;i<s.size();i++){
                if(s[i]=='('){
                    stk.push(i);//stack 仅仅存放当前“(”的索引值
                }else{
                    if(stk.empty()){
                        first=0;
                    }else{
                        int j=stk.top();
                        stk.pop();
                        if(stk.empty()){
                            first+=i-j+1;
                            res=max(res,first);
                        }else{
                            res=max(res,i-stk.top());
                        }
                    }
                }
            }
            return res;
        }
    };


  • 相关阅读:
    简单 dp 题选做
    UVa11327
    Codeforces Round #641 (div.2) 题解
    新博客
    数位dp的学习
    stl粗略用法
    cf437C The Child and Toy
    poj1995 Raising Modulo Numbers
    Tarjan的学习
    最短路模板
  • 原文地址:https://www.cnblogs.com/jsrgfjz/p/8519830.html
Copyright © 2011-2022 走看看