32. 最长有效括号
2023-04-18 16:11:32 时间
思路:
- 栈的功能:栈存储索引。在遍历过程中,只要有两个连续索引对应字符可以构成一对括号就出栈,这样栈中存储的都是到当前位置暂时不可以构成括号的索引。
- 排除构不成括号的情况
- i. 当前栈为空。当前字符s[i]将会是栈中第一个字符,无法跟之前的字符构成一对括号
- ii. 当前字符s[i]是左括号'('。左括号无法跟栈顶元素构成一对括号
- iii. 栈顶元素是右括号')'。无论当前字符s[i]是什么,都无法和栈顶元素构成一对括号 其实也就是栈顶元素必须为'(',当前字符s[i]必须为')',这样才能构成一对括号
- 构成一对括号以后,栈顶元素出栈。
- 当前有效括号的长度 = 当前索引i - 栈顶存储的索引stack[-1] 最后要返回的最长有效括号长度即为res = max(res, i - stack[-1]) 因为此时栈可能为空,如果为空就是前面的元素都是括号,那么res = max(res, i - (-1))
代码:
public int longestValidParentheses(String s) {
LinkedList<Integer> stack =new LinkedList<>();
int res=0;
for (int i = 0; i < s.length(); i++) {
//如果当前字符是绝对不能匹配成功的,进行压栈
if (stack.isEmpty()||s.charAt(i)=='('||s.charAt(stack.getLast())==')'){
stack.add(i);
}else {
stack.removeLast();
res=Math.max(res,stack.isEmpty()?i+1:i-stack.getLast());
}
}
return res;
}
相关文章
- 直接在代码里面对list集合进行分页
- .NET Framework 4.5新特性详解
- 大数据的简要介绍
- 大数据的由来
- 高斯混合模型的自然梯度变量推理
- timing-wheel 仿Kafka实现的时间轮算法
- 使用Navicat软件连接自建数据库(Linux系统)
- 那一天,我被Redis主从架构支配的恐惧
- Redis 深入了解键的过期时间
- C#使用委托调用实现用户端等待闪屏
- 基于流计算 Oceanus 和 Elasticsearch Service 构建百亿级实时监控系统
- GRAND | 转录调控网络预测数据库
- JFreeChart API中文文档
- 临床相关突变查询数据库
- TIGER | 人类胰岛基因变化查询数据库
- 视频边缘计算网关EasyNVR在视频整体监控解决方案中的应用分析
- Apache Arrow - 大数据在数据湖后的下一个风向标
- 常见的电商数据指标体系
- AKShare-艺人数据-艺人流量价值
- MySQL中多表联合查询与子查询的这些区别,你可能不知道!