LeetCode - 32. Longest Valid Parentheses

32. Longest Valid Parentheses

Problem‘s Link

----------------------------------------------------------------------------

Mean:

给定一个由‘(‘和‘)‘组成的字符串,求最长连续匹配子串长度.

analyse:

定义一个stack<pair<char,int>>类型的stack.

遇到‘(‘进栈;

遇到‘)‘需要分两种情况讨论:

  1. 栈顶元素为‘(‘,正好匹配,将栈顶元素出栈;
  2. 栈顶元素为‘)‘或栈为空,将当前符号和下标入栈.

这个栈构建完以后,我们只需要找这个栈中相邻两个top.second()之差即可.

trick:注意‘(()‘这种情况,需要特判,即backVal的值为len.

Time complexity: O(N)

view code

/**
* -----------------------------------------------------------------
* Copyright (c) 2016 crazyacking.All rights reserved.
* -----------------------------------------------------------------
*       Author: crazyacking
*       Date  : 2016-03-01-20.35
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long(LL);
typedef unsigned long long(ULL);
const double eps(1e-8);

class Solution
{
public:
   int longestValidParentheses(string s)
   {
       int len=s.length();
       stack<pair<char,int>> sta;
       for(int i=0;i<len;++i)
       {
           if(s[i]==‘(‘)
               sta.push(make_pair(‘(‘,i));
           else
           {
               if(!sta.empty())
               {
                   pair<char,int> t=sta.top();
                   if(t.first==‘(‘)
                       sta.pop();
                   else
                       sta.push(make_pair(‘)‘,i));
               }
               else
                   sta.push(make_pair(‘)‘,i));
           }
       }

int ans=0,frontVal=len,backVal;
       if(!sta.empty() &&sta.top().second!=len-1)
           backVal=len;
       else
           backVal=len-1;
       while(!sta.empty())
       {
           pair<char,int> t=sta.top();
           sta.pop();
           frontVal=t.second;
           ans=max(ans,backVal-frontVal-1);
           backVal=frontVal;
       }
       ans=max(ans,frontVal-0);
       return ans;
   }
};

int main()
{
   Solution solution;
   string s;
   while(cin>>s)
   {
       cout<<solution.longestValidParentheses(s)<<endl;
   }
   return 0;
}
/*

*/

时间: 2024-12-28 00:34:37

LeetCode - 32. Longest Valid Parentheses的相关文章

Java [leetcode 32]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 exampl

LeetCode 32 Longest Valid Parentheses(最长有效括号)(*)

翻译 给定一个仅仅包含"("或")"的字符串,找到其中最长有效括号子集的长度. 对于"(()",它的最长有效括号子集是"()",长度为2. 另一个例子")()())",它的最长有效括号子集是"()()",其长度是4. 原文 Given a string containing just the characters '(' and ')', find the length of the l

leetCode 32.Longest Valid Parentheses (有效的最大括号) 解题思路和方法

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

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

Problem: 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 exa

[LeetCode] 32. 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 &

[leetcode]32. Longest Valid Parentheses最长合法括号子串

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. Example 1: Input: "(()" Output: 2 Explanation: The longest valid parentheses substring is "()" Example

19.2.1 [LeetCode 32] Longest Valid Parentheses

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. Example 1: Input: "(()" Output: 2 Explanation: The longest valid parentheses substring is "()" Example

leetcode 之 Longest Valid Parentheses

leetcode中和括号匹配相关的问题共有三个,分别是: Valid Parentheses Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. The brackets must close in the correct order, "()" and "()[]{}" are a

[LeetCode] 032. Longest Valid Parentheses (Hard) (C++)

指数:[LeetCode] Leetcode 指标解释 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 032. Longest Valid Parentheses (Hard) 链接: 题目:https://oj.leetcode.com/problems/longest-valid-parentheses/ 代码(github):https://github.com/illuz/leetcode 题意: 问一个字