最长有效括号长度

题目详情

给定只包含括号字符‘(‘和 ‘)‘‘的字符串,请找出最长的有效括号内子括号的长度。

举几个例子如下:

  1. 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数1个,故它的长度为 2。
  2. 再比如对于字符串") () () )",其中最长的有效的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4。
  3. 再比如对于"( () () )",它的长度为6。

换言之,便是有效双括号"()"数的两倍。

给定函数原型int longestValidParentheses(string s),请完成此函数,实现上述功能。

#include <iostream>
using namespace std;
int longestValidParentheses(string s)
{
    int num = 0;
    int s_top = 0;
    for(int i=0;i<s.length();i++)
    {
        switch(s[i])
        {
        case ‘(‘:
            s_top++;
            break;
        case ‘)‘:
            if(s_top>0){
                s_top--;
                num++;
                break;
            }
        }
    }
    return num*2;
}
int main(){
    string s = "(()())";
    cout<<longestValidParentheses(s);
    return 0;
}

最长有效括号长度,布布扣,bubuko.com

时间: 2024-08-05 15:19:41

最长有效括号长度的相关文章

求最长有效括号长度 java

题目:输入只包含圆括号的字符串,找出最长的合法括号子串的长度 比如: "(()"-->2,最长的有效子串是"()" ")()())"-->4,最长的有效子串是"()()" 解题思路: 如果输入是左括号就直接入栈,如果是右括号,如果此时栈为空或此时的栈顶不为左括号就不作处理同时把记录有效长度的临时变量置为0,如果栈顶为左括号则出栈并把记录有效长度的临时变量加2.最后返回最大的记录长度的临时变量即可. 代码: impo

LongestValidParentheses, 求最长合法括号子串长度-----同类问题ValidParentheses,GenerateParentheses

问题描述:求括号字符串中最长合法子串长度.例如:()((),返回2,而不是4. 算法分析:还是利用栈,和判断合法括号对是一样的. 1 public static int longestValidParentheses(String s) { 2 Stack<int[]> stack = new Stack<int[]>(); 3 int result = 0; 4 5 for(int i=0; i<=s.length()-1; i++) 6 { 7 char c = s.ch

leetcode:32 最长有效括号

 题目: 给一个包含了'(' 和 ')'的字符串,求出其中最长有效括号的长度. 做题情况:自己做出来,但做了较长的时间. 思路:可以算得穷举法的时间复杂度为O(n^3).虽然这题求的是最长的长度,但是用不了动态规划,因为无法找到一个合适的状态.考虑能不能在O(n)内实现,即遍历一次字符串.发现可以通过栈来做.具体方法如下: 对于当前字符,如果是"(",直接压入栈中.如果是")",要分以下几种情况讨论: (1)如果当前栈为空,说明不存在与当前右括号配对的左括号,直接c

九度oj 题目1337:寻找最长合法括号序列

题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的左括号匹配.例如:((()))()()便是一个长度为10的合法括号序列,而(()))( 则不是. 需要你求解的是,找出最长的合法括号子序列的长度,同时找出具有这样长度的序列个数. 输入: 测试数据包括多个,每个测试数据包含两行: 第一行为一个整数N,其中N不会超过10^6. 第二行为一个长度为N的字

九度oj 题目1342:寻找最长合法括号序列II

题目描述: 假如给你一个由’(‘和’)’组成的一个随机的括号序列,当然,这个括号序列肯定不能保证是左右括号匹配的,所以给你的任务便是去掉其中的一些括号,使得剩下的括号序列能够左右括号匹配且长度最长,即最长的合法括号序列. 输入: 测试数据包括多个,每个测试数据只有一行,即一个随机的括号序列,该括号序列的长度保证不超过106. 输出: 对于每个测试案例,输出一个整数,表示最后剩下的最长合法括号序列长度. 样例输入: (())() (() 样例输出: 6 2 这个题和1337求的是不一样的代码如下

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

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

[Jobdu] 题目1337:寻找最长合法括号序列

题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的左括号匹配.例如:((()))()()便是一个长度为10的合法括号序列,而(()))( 则不是. 需要你求解的是,找出最长的合法括号子序列的长度,同时找出具有这样长度的序列个数. 输入: 测试数据包括多个,每个测试数据包含两行: 第一行为一个整数N,其中N不会超过10^6. 第二行为一个长度为N的字

[Swift]LeetCode32. 最长有效括号 | 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

最长有效括号

给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()" 示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()" /** * @param {string} s * @return {number} */ var longestValidParentheses = function(s) { //