最长有效括号(栈)

  • 1. 题目描述
  • 2. 题目分析
  • 3. C语言实现

1. 题目描述

难度:困难

2. 题目分析

这道题与LeetCode–20. 有效的括号类似,LeetCode20要求的是找出字符串是否是有效的括号,我们利用的是模拟一个栈的方法以及删除法。这道题是来求最长有效括号,删除法就行不通了,但是我们仍然可以使用栈的方法来解决。
- 栈(C)
模拟一个栈的结构, 将字符挨个压入栈中,如果字符匹配则弹出数据,记录栈中的字符以及其对应的下标。遍历完字符串以后,栈中剩下的都是没有匹配的字符以及下标。根据这些下标计算出最大的有效括号长。时间复杂度O(N)。

3. C语言实现

代码如下

// 栈
int longestValidParentheses(char * s){int max = 0, index = 0;  // index为栈首元素的指针int len = strlen(s);if(len == 0 || len == 1) return 0;// 申请一个栈stack来存放要放入的字符,申请一个栈label来存放stack中字符对应的下标char* stack = (char *)malloc(sizeof(char)*(len+1));int* label = (int *)malloc(sizeof(int)*(len+1));stack[0] = s[0];stack[len] = '\0';label[0] = 0;for(int i = 1; i < len; i++){// 栈中无元素时if(index < 0){index++;stack[index] = s[i];label[index] = i;}// s[i]元素与栈首的字符匹配时,将栈首的字符弹出else if(s[i] != stack[index] && s[i] == ')'){index--;}// 否则,将s[i] 压入栈中else{index++;stack[index] = s[i];label[index] = i;}}// 最终,label中存放的下标都是没有匹配字符的下标,根据这些下标可以计算最长有效括号数if(index < 0) return len;else{label[index+1] = len;max = max > label[0]? max:label[0];for(int i = 0; i < index+1; i++){max = max > label[i+1]-label[i]-1? max:label[i+1]-label[i]-1;}}free(stack);free(label);return max;
}

运行结果如下:

LeetCode--32. 最长有效括号(栈)相关推荐

  1. Leetcode 32 最长合法括号子序列

    算法特辑–动态规划 Leetcode 32 最长合法括号子序列 给定只有"(" 和 ")" 的字符串,求出最长的合法括号子序列. 例如:"())&qu ...

  2. leetcode:32. 最长有效括号

    32. 最长有效括号 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/longest-valid-parentheses/ 给你一个只包含 '(' 和 ...

  3. LeetCode 32. 最长有效括号(栈DP)

    文章目录 1. 题目信息 2. 栈 解题 3. 动态规划 解题 1. 题目信息 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1:输入: "(() ...

  4. LeetCode 32最长有效括号(困难)

    维护不易,还请点个赞赞,如果想加入还请关注公众号bigsai回复进群加入打卡. 题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: &qu ...

  5. Leetcode 32.最长有效括号

    最长有效括号 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 " ...

  6. leetcode 32. 最长有效括号

    题目 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()& ...

  7. LeetCode 32 最长有效括号

    https://leetcode-cn.com/problems/longest-valid-parentheses/ 解决方案 class Solution {public int longestV ...

  8. 32. 最长有效括号

    32. 最长有效括号 题目描述 给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度. 示例1: 输入:s = "(()" 输出:2 解释:最 ...

  9. 【LeetCode笔记】32. 最长有效括号(Java、动态规划、栈、字符串)

    文章目录 题目描述 代码 & 解析 1. 栈做法 2. 动态规划 题目描述 (括号题真的好烦人) 讲道理,题目一看,大概率就是用dp做 代码 & 解析 1. 栈做法 这个做法我没实际写 ...

  10. [力扣]32. 最长有效括号(三解法)

    解法一:栈 class Solution:def longestValidParentheses(self, s: str) -> int:q = []st = -1res = 0for i i ...

最新文章

  1. JS文本框默认值处理
  2. 22 款设计和可视化神经网络的工具
  3. 庄小威、陈志坚等9位科学家分享2100万美元奖金:2019年科学突破奖公布
  4. mysql二分法查找亿行_算法——二分法查找(binarySearch)
  5. “贵妇”必备的高价糖水,我给燕窝上了10年智商税
  6. vc++中ListBox用法
  7. 大型网站架构演进(4)使用应用服务器集群
  8. 关于计算机的内存的一点常识
  9. 企业财务报表分析【2】
  10. 【UI界面开发】背包系统一般思路
  11. Java 将控制台输出打印 输出到本地文件
  12. android jpct ae教程,android OpenGL开发使用JPCT-AE引擎显示3D立方体
  13. [安装之1] dell设置从ssd启动_如何进bios设置ssd固态硬盘为第一启动
  14. 我国成功研制出巨型计算机,1989年11月17日 我国首台小巨型电子计算机研制成功...
  15. Rocky Linux一个可用于生成环境的Linux
  16. mysq学习课堂笔记 第一天学习(值得收藏!)
  17. 直接最小二乘法拟合椭圆
  18. 【DOTS学习笔记】从第一个Jobs程序入门
  19. Vue2(九):浏览器本地存储、组件自定义事件、TodoList自定义事件
  20. java geometry mysql_java程序操作Geometry对象

热门文章

  1. php判断与网站访问时间,织梦CMS模板用php判断某个时间段显示和隐藏内容
  2. android 字符串转浮点,Android String类型转换为float、double和int的工具类方法
  3. oracle 中的日志在处理,ORACLE在存储过程中记录日志的处理包
  4. 寻找两个有序数组中的中位数
  5. FragmentTabHost切换Fragment时保存状态,避免切换Fragment走onCreateView和onDestroyView方法;...
  6. Elasticsearch下安装ik分词器
  7. 2016-2017-2 20155322 实验五 网络编程与安全
  8. bzoj 4278 Tasowanie 后缀数组+贪心
  9. typedef 浅析
  10. Sphinx语音识别学习记录 (五)-错误调试