Longest Valid Parentheses

原创 2018年04月17日 14:29:58

题目描述

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. 

这道题的要求是在仅包含“(”和“)”的字符串中,找到最长的括号匹配的子串,返回其长度。

对于括号匹配,用栈维护左括号,即在读取字符串的时候,遇到左括号就入栈。遇到右括号就出栈,同时判断当前括号匹配的子串是否为最长子串。

不过在判断括号匹配的子串的长度的时候,有一些值得注意的问题,其中需要借助变量l记录当前括号匹配的子串的左侧位置:如果遇到右括号

  1. 如果当前栈为空,这说明当前的右括号并不构成括号匹配的子串,则l移到下一位置。
  2. 如果当前栈不为空,弹出栈顶元素。弹出操作后,如果栈为空,说明加上当前的右括号可以构成括号匹配的子串,其子串长度就为l位置到当前位置的长度;如果栈不为空,则栈顶元素后面的括号对肯定是匹配的,因此子串长度就为栈顶元素位置的后一位置到当前右括号位置的长度。

时间复杂度:O(n)

空间复杂度:O(n)

实现代码:

              class Solution {
public:
    int longestValidParentheses(string s) {
         int res = 0, l = 0;
         stack<int> si;
         for(int i = 0; i < s.size(); ++ i)
         {
             if(s[i] == '(')
                 si.push(i); //压入位置;
             else
             {
                 if(si.empty())
                     l = i + 1; //找到一开始出现左括号的位置;
                 else
                 {
                     si.pop();
                     if(si.empty())
                         res = max(res, i - l + 1);
                     else
                         res = max(res, i - si.top());
                 }
             }
         }
         return res;
    }
};


LeetCode Longest Valid Parentheses 解题报告

分析,求出一串由:‘(’和‘)’组成的字符串中最长有效括号的长度。例如:(()(),结果是4。((()))结果是6。())()()结果是4。...
  • worldwindjp
  • worldwindjp
  • 2014-09-22 00:24:27
  • 9219

LeetCode --- 32. Longest Valid Parentheses

题目链接:Longest Valid Parentheses Given a string containing just the characters '(' and ')', find the ...
  • makuiyu
  • makuiyu
  • 2015-02-04 23:16:46
  • 1686

Leetcode 32 Longest Valid Parentheses DP好题

就喜欢做这种想法题, 一开始的想法和之前做过的一道括号匹配差不多,用栈。 记录未匹配的括号位置,然后两两相减找到最大值,过了,但速度并不快。 在discuss中看到有人用DP,恍然大悟! dp[i]表...
  • u012614906
  • u012614906
  • 2016-09-05 13:43:45
  • 1663

LeetCode 32 Longest Valid Parentheses (C,C++,Java,Python)

Problem: Given a string containing just the characters '(' and ')', find the length of the lo...
  • runningtortoises
  • runningtortoises
  • 2015-05-14 17:16:32
  • 732

[Leetcode]32. Longest Valid Parentheses @python

题目Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (w...
  • qian2729
  • qian2729
  • 2016-01-17 11:30:43
  • 373

【LeetCode】Longest Valid Parentheses 解题报告

【题目】 Given a string containing just the characters '(' and ')', find the length of the longes...
  • ljiabin
  • ljiabin
  • 2015-04-06 19:05:15
  • 1852

LeetCode(32)Longest Valid Parentheses

题目如下: Given a string containing just the characters '(' and ')', find the length of the longest vali...
  • feliciafay
  • feliciafay
  • 2014-03-07 08:31:54
  • 1876

Longest Valid Parentheses,二维动态规划、一维动态规划、stack

一、二维动态规划 int longestValidParentheses(string s) {         int len=s.length(),maxLen=0;         bool v...
  • angelewings
  • angelewings
  • 2014-12-10 10:31:34
  • 763

[leetcode-32]Longest Valid Parentheses(java)

问题描述: Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest val...
  • zdavb
  • zdavb
  • 2015-09-01 16:54:26
  • 589

LeetCode 32 Longest Valid Parentheses 最大合法括号匹配长度计算 动态规划算法有待学习

Longest Valid Parentheses Given a string containing just the characters '(' and ')', find the len...
  • gx262091291
  • gx262091291
  • 2015-09-11 18:46:05
  • 643
收藏助手
不良信息举报
您举报文章:Longest Valid Parentheses
举报原因:
原因补充:

(最多只允许输入30个字)