最长括号匹配问题
来源:互联网 发布:花粉儿秒杀软件 编辑:程序博客网 时间:2024/05/16 11:03
问题描述:给定字符串,仅包含左括号和右括号('('和')'),找出最长匹配的括号子串,返回子串长度。
算法思路如下:
- 记起始匹配位置start=-1,最长子串长度ml=0.
- 申请一个栈,考虑第i位字符c
- 如果c为’(‘,将i压栈
- 如果c为’)’,显然它应该与栈顶元素位置上的’(‘匹配,那么:
- 此时如果栈为空,说明没有与之相匹配的’(‘,记start=i。也就是将起始匹配位置移动到这里,右括号分割的两块没有联系了。
- 此时若栈不为空,弹栈
- 若弹栈后栈为空,此时i-start即为当前找到的匹配长度。检查i-start与ml的大小,更新ml的值。
- 若此时栈不空,此时栈顶元素是之前匹配的最后位置,只需检查i-栈顶元素的值与ml的大小,更新ml的值即可。
代码实现:
public class Main { public static void main(String[] args) { char[] c = "(()))((())()".toCharArray(); System.out.println(calculate(c)); } public static int calculate(char[] c) { Stack<Integer> s = new Stack<Integer>(); int ml = 0; int start = -1; for (int i = 0; i < c.length; i++) { if (c[i] == '(') s.push(i); else { if (s.isEmpty()) start = i; else { s.pop(); if (s.isEmpty()) ml = Math.max(ml, i - start); else { ml = Math.max(ml, i - s.peek()); } } } } return ml; }}
因为申请了栈空间,所以这段代码时间复杂度是O(n),空间复杂度是O(n)。
0 0
- 最长括号匹配问题
- [C++]连续最长括号匹配问题
- 最长括号匹配长度
- 最长括号匹配
- 最长括号匹配(栈)
- 算法学习-最长括号匹配
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号的匹配问题
- 括号匹配问题
- 括号匹配问题
- [栈] 括号匹配问题
- NY : 括号匹配问题
- 我是一个线程(修订版)
- Redis分布式锁
- 字符串指针和字符串数组---Access violation writing location 错误
- require.js入门教程
- python中sort sorted() reverse() reversed() 的区别
- 最长括号匹配问题
- 使用Sync Adater(1)综述
- webAPI
- SharedPrefences小结
- 安装PS时提示...计算机重新启动操作可能处态
- 百度——基础架构部面试(产品实习生-营销云方向)
- JPush极光推送的原理与简单demo的实现会遇到的问题
- jQuery延迟加载(懒加载)插件 – jquery.lazyload.js
- 利用POI抽取word中的图片并保存在文件中