首页 > 其他 > 详细

[LeetCode] 32. Longest Valid Parentheses 最长有效括号

时间:2018-03-03 17:42:31      阅读:248      评论:0      收藏:0      [点我收藏+]

Given a string containing just the characters ‘(‘ and ‘)‘, find the length of the longest valid (well-formed) parentheses substring.

For "(()", the longest valid parentheses substring is "()", which has length = 2.

Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4.

可以用 DP或者Stack来解。

栈 Stack:定义个start变量来记录合法括号串的起始位置,遍历字符串,如果遇到左括号,则将当前下标压入栈,如果遇到右括号,如果当前栈为空,则将下一个坐标位置记录到start,如果栈不为空,则将栈顶元素取出,此时若栈为空,则更新结果和i - start + 1中的较大值,否则更新结果和i - 栈顶元素中的较大值。

Java:

public static int longestValidParentheses(String s) {
	Stack<int[]> stack = new Stack<int[]>();
	int result = 0;
 
	for(int i=0; i<=s.length()-1; i++){
		char c = s.charAt(i);
		if(c==‘(‘){
			int[] a = {i,0};
			stack.push(a);
		}else{
			if(stack.empty()||stack.peek()[1]==1){
				int[] a = {i,1};
				stack.push(a);
			}else{
				stack.pop();
				int currentLen=0;
				if(stack.empty()){
					currentLen = i+1;
				}else{
					currentLen = i-stack.peek()[0];
				}
				result = Math.max(result, currentLen);
			}
		}
	}
 
	return result;
}

  

[LeetCode] 32. Longest Valid Parentheses 最长有效括号

原文:https://www.cnblogs.com/lightwindy/p/8496954.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!