LeetCode--32. 最长有效括号(栈)
最长有效括号(栈)
- 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. 最长有效括号(栈)相关推荐
- Leetcode 32 最长合法括号子序列
算法特辑–动态规划 Leetcode 32 最长合法括号子序列 给定只有"(" 和 ")" 的字符串,求出最长的合法括号子序列. 例如:"())&qu ...
- leetcode:32. 最长有效括号
32. 最长有效括号 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/longest-valid-parentheses/ 给你一个只包含 '(' 和 ...
- LeetCode 32. 最长有效括号(栈DP)
文章目录 1. 题目信息 2. 栈 解题 3. 动态规划 解题 1. 题目信息 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1:输入: "(() ...
- LeetCode 32最长有效括号(困难)
维护不易,还请点个赞赞,如果想加入还请关注公众号bigsai回复进群加入打卡. 题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: &qu ...
- Leetcode 32.最长有效括号
最长有效括号 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 " ...
- leetcode 32. 最长有效括号
题目 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()& ...
- LeetCode 32 最长有效括号
https://leetcode-cn.com/problems/longest-valid-parentheses/ 解决方案 class Solution {public int longestV ...
- 32. 最长有效括号
32. 最长有效括号 题目描述 给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度. 示例1: 输入:s = "(()" 输出:2 解释:最 ...
- 【LeetCode笔记】32. 最长有效括号(Java、动态规划、栈、字符串)
文章目录 题目描述 代码 & 解析 1. 栈做法 2. 动态规划 题目描述 (括号题真的好烦人) 讲道理,题目一看,大概率就是用dp做 代码 & 解析 1. 栈做法 这个做法我没实际写 ...
- [力扣]32. 最长有效括号(三解法)
解法一:栈 class Solution:def longestValidParentheses(self, s: str) -> int:q = []st = -1res = 0for i i ...
最新文章
- 102. Binary Tree Level Order Traversal
- 和ur的区别_UR机械臂simscape正逆解仿真
- 复现经典:《统计学习方法》第 10 章 隐马尔可夫模型
- Halcon - 测量 - 轮廓到线的距离
- discuz php文件,discuz目录文件资料汇总
- 【Java】文件操作
- Apache Druid Console 远程命令执行漏洞
- 主子表对应的字段_Power Pivot针对表筛选的函数及差异
- (五)比赛中的CV算法(上2)目标检测初步:神经网络及优化方法
- python字符串去掉最后的逗号_拼接字符串时去掉最后一个多余逗号
- 【测绘程序设计】——角度与弧度的转换
- android蓝牙开启的通知,Android蓝牙LE通知的问题
- 关于 移动 电信 联通 运营商数据抓取 通话记录 京东淘宝学信网数据抓取 失信报告,网贷黑名单,央行征信报告数据抓取
- 海思HI3518E视频处理基础概念《二》----- 视频输入VI和 视频输出VO
- word输入(a)一敲空格就变自动编号
- 你有用过Type-C接口的手电筒吗?
- bam文件读取_SAM/BAM 格式文件内容解析
- 演讲实录丨朱频频 让Bots无处不在
- 【软件测试】接口——基本测试流程
- html里面a标签点击时去除下划线
热门文章
- python selenium 文件上传_python-selenium -- 文件上传操作
- 载入页面时与服务器的连接被重置。_快捷指令打不开怎么回事?安装快捷指令无法载入的解决办法...
- Apache的详细配置
- React-Native 组件开发方法
- 第1次在Flash Builder中写程序
- 《江南》、乌镇、《似水年华》
- MySql 你知道 order by 是怎么回事吗? MySql全字段排序与 rowid 排序
- Command 模式 Step by Step
- VC++ .net 2005运行库解析
- C# MVC 用户登录状态判断