博客
关于我
【力扣】[热题 HOT100] 32.最长有效括号
阅读量:486 次
发布时间:2019-03-07

本文共 1148 字,大约阅读时间需要 3 分钟。

最长有效括号子串长度问题分析

问题描述

给定一个仅包含 '(' 和 ')' 的字符串,找出其中最长的有效括号子串的长度。有效括号子串要求格式正确且连续。

思路解析

为了找到最长的有效括号子串,可以使用栈来解决这个问题。栈的主要作用是记录左括号的位置,从而能够快速找到匹配的右括号。以下是具体的思路步骤:

  • 初始化栈:栈中最初放入-1,这是为了计算包含当前右括号的情况。
  • 遍历字符串:对每个字符进行处理。
    • 如果是左括号,压栈,记录其位置。
    • 如果是右括号,弹栈,找出相应的左括号。
      • 如果栈为空,说明当前右括号可能作为起点,压栈记录当前位置。
      • 如果栈不为空,计算当前右括号位置与栈顶元素的差值,得到一个有效子串的长度,更新最大长度。
  • 代码实现

    public class Solution {    public int longestValidParentheses(String s) {        if (s.empty()) {            return 0;        }        int maxLen = 0;        stack
    st = new stack<>(); // 栈中存储左括号的位置 st.push(-1); // 初始化栈,用于处理连续的右括号情况 for (int i = 0; i < s.size(); ++i) { if (s.charAt(i) == '(') { st.push(i); // 遇到左括号,压栈 } else { st.pop(); // 遇到右括号,弹栈 if (st.empty()) { // 栈为空,说明当前右括号可能是一个单独的右括号 st.push(i); // 为空则压栈,供后续计算使用 } else { int currentLen = i - st.top(); // 计算当前有效子串的长度 maxLen = Math.max(maxLen, currentLen); // 更新最大长度 } } } return maxLen; }}

    总结

    通过上述方法,可以高效地找到字符串中的最长有效括号子串。这种方法的时间复杂度为O(n),空间复杂度为O(n),适用于处理较长字符串的情况。

    转载地址:http://hiacz.baihongyu.com/

    你可能感兴趣的文章
    C# datagridview行号自适应宽度
    查看>>
    C# WinForm 圆角button
    查看>>
    .mpp文件在线打开网址
    查看>>
    C#中的委托(delegate)
    查看>>
    error C2061: syntax error : identifier 'string'
    查看>>
    webservice调用报错 SAXException
    查看>>
    Problem G. The Stones Game【取石子博弈 & 思维】
    查看>>
    洛谷多校第2轮.E——Anan and Minecraft【并查集】(判断图同构)
    查看>>
    AS构建Empty Android Things程序运行闪退
    查看>>
    HRBUST—1891 A + B Problem VII
    查看>>
    装饰模式
    查看>>
    责任链模式
    查看>>
    Jmeter-HTTP request的使用
    查看>>
    Jmeter-用户参数User Parameters(实践:接口请求入参参数化)
    查看>>
    Docker基础+Docker安装mysql
    查看>>
    框架综合实践(3)-业务逻辑businessView的封装
    查看>>
    13.python接口测试-发送http请求
    查看>>
    Robot Framework 新建资源文件-用户关键字
    查看>>
    python安装过程
    查看>>
    POJ - 1459 Power Network 最大流模版,有点意思的输入
    查看>>