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

简介:

翻译

给定一个仅仅包含“(”或“)”的字符串,找到其中最长有效括号子集的长度。

对于“(()”,它的最长有效括号子集是“()”,长度为2。

另一个例子“)()())”,它的最长有效括号子集是“()()”,其长度是4。

原文

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.

代码

一开始我写啊写啊写……

class Solution {
public:
int longestValidParentheses(string s) {
    stack<char> brackets;
    int length = 0;
    int index = 0;
    while(index < s.size()) {
        if(brackets.empty()) {
            brackets.push(s[index]);
            ++ index;
        } else {
            if(brackets.top() == '(' && s[index] == ')') {
                length += 2;
                ++ index;
                brackets.pop();
            } else  {
                brackets.push(s[index]);
                ++ index;
            }
        }
    }
    return length;
}
};

结果发现我理解错了题意,比如说“()(()”这种,其长度应该是2为不是4,因为必须是连续的。我的思路又转换不过来了,就一直纠结……

我尝试把加“2”这个操作写在字符串中,然后对于括号的不连续在该字符串中用空格(” “)来打”断点“,最后对字符串进行解析。

然而最终还是没能写出来……又去求助了……

class Solution {
public:
int longestValidParentheses(string s) {
    stack<int> brackets;
    brackets.push(0);
    int res = 0;
    for(int i = 0; i < s.length(); ++ i) {
        if(s[i] == '(') {
            brackets.push(i + 1);
        } else {
            brackets.pop();
            if(brackets.size()) {
                res = max(res, i + 1 - brackets.top());
                cout<<brackets.top()<<endl;;
            } else {
                brackets.push(i + 1);
            }
        }
    }
    return res;
}
};
 (  )  (  (  )
  0  1   2   3  4

i = 0   0,1
i = 1   0      top = 0    res = 2
i = 2   0,3    
i = 3   0,3,4
i = 4   0,3    top = 3    res = 2

好久没刷题了,继续努力……

目录
相关文章
|
26天前
|
算法
LeetCode第22题括号生成
该文章介绍了 LeetCode 第 22 题括号生成的解法,通过回溯算法生成所有可能的括号组合,在递归过程中根据左右括号数量的条件进行剪枝,从而得到有效的括号组合。
LeetCode第22题括号生成
|
26天前
|
存储 算法
LeetCode第20题有效的括号
该文章介绍了 LeetCode 第 20 题有效的括号的解法,通过分析有效括号的特征,使用栈结构存储括号关系,判断遇到右边括号时栈顶是否有匹配的左边括号,从而解决问题,同时总结了栈的先进后出结构可用于解决有规律的符号匹配问题。
LeetCode第20题有效的括号
|
1月前
|
算法 Python
【Leetcode刷题Python】括号匹配问题
一种解决括号匹配问题的Python实现方法,通过计算给定括号串的所有子串的最长合法括号子序列长度之和来确定权值。
14 0
|
1月前
|
机器学习/深度学习 Python
【Leetcode刷题Python】22. 括号生成
本文介绍了了LeetCode题目22的两种Python编程解决方案,题目要求生成所有可能的且有效的括号组合,包括暴力求解和回溯方法。
16 0
|
1月前
|
Python
【Leetcode刷题Python】20. 有效的括号
LeetCode上题目“20. 有效的括号”的Python解决方案,使用栈数据结构来验证括号序列的有效性。具体实现中,会在栈中预先放置一个特殊字符以避免在弹出操作时出现空栈错误,并通过匹配左右括号来判断括号序列是否有效。
14 0
|
2月前
|
算法 测试技术
力扣经典150题第五十一题:有效的括号
力扣经典150题第五十一题:有效的括号
23 0
|
3月前
|
算法
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
38 6
|
1月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
63 2
|
1月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
31 7