Longest Valid Parentheses
2015-08-10 16:16
309 查看
求最长的括号匹配的子串
比如
())()()的括号匹配的子串为(),()()两个,最长的长度为4
解法:
维护一个栈,栈底值为上次匹配失败的位置
首先初始放一个-1入栈代表上次匹配失败的地方为-1
依次扫描字符
若为'(',将位置放入栈中
若为')',若栈中元素大于1个,则代表有'('可匹配,更新最优值,否则更新栈底的值为未匹配值的位置
显然,对于任意一个部分最长子串,其最后一个字符更新时取的是上一次匹配失败的位置,故所有部分最长子串取得最优结果
比如
())()()的括号匹配的子串为(),()()两个,最长的长度为4
解法:
维护一个栈,栈底值为上次匹配失败的位置
首先初始放一个-1入栈代表上次匹配失败的地方为-1
依次扫描字符
若为'(',将位置放入栈中
若为')',若栈中元素大于1个,则代表有'('可匹配,更新最优值,否则更新栈底的值为未匹配值的位置
显然,对于任意一个部分最长子串,其最后一个字符更新时取的是上一次匹配失败的位置,故所有部分最长子串取得最优结果
public int longestValidParentheses(String s) { int size = s.length(); Stack<Integer> stack = new Stack<Integer>(); stack.push(-1); int answer = 0; //栈底保存上次匹配失败的字符位置,初始化为-1 for(int i= 0; i< size; i++) { if(s.charAt(i) =='(') { stack.push(i); } else { if(stack.size()>1){ stack.pop(); int temp = stack.peek(); answer = Math.max(answer, i-temp); } else{ stack.pop(); stack.push(i); } } } return answer; }
相关文章推荐
- jQuery 图片轮播
- qt越来越好了
- webstrom 自动换行
- 编译安装python
- Javascript 兼容IE 预览本地上传图片方法
- Request的getParameter和getAttribute方法的区别
- SQL入门
- mysql 数据库 HQL语句查询一个月内时间的数据
- JSON-JSON字符串转换成JSON对象、JSON对象数组、java实体类以及保存到List列表中
- 线程同步
- hdu2082 找单词(母函数)
- 子序列的个数(DP计数)
- Java之GUI编程(一)
- Centos修改dhcpd日志不记入系统日志
- Python入门 条件判断和循环
- char 转换为 QString
- php压缩图片
- [leetcode-95]Unique Binary Search Trees II(c++)
- cache数据库之表的存储结构
- 面试题收集