给一个只包含 '(' 和 ')' 的字符串,找出最长的有效(正确关闭)括号子串的长度。
对于 "(()",最长有效括号子串为 "()" ,它的长度是 2。
另一个例子 ")()())",最长有效括号子串为 "()()",它的长度是 4。
详见:https://leetcode.com/problems/longest-valid-parentheses/description/
Java实现:
start变量来记录合法括号串的起始位置,遍历字符串,如果遇到左括号,则将当前下标压入栈,如果遇到右括号,如果当前栈为空,则将下一个坐标位置记录到start,如果栈不为空,则将栈顶元素取出,此时若栈为空,则更新结果和i - start + 1中的较大值,否则更新结果和i - 栈顶元素中的较大值.
class Solution { public int longestValidParentheses(String s) { if(s==null || s.length()==0){ return 0; } Stack<Integer> stack = new Stack<Integer>(); int start = 0; int res = 0; for(int i=0;i<s.length();i++){ if(s.charAt(i)=='('){ stack.push(i); }else{ if(stack.isEmpty()){ start = i+1; }else{ stack.pop(); res = stack.isEmpty()?Math.max(res,i-start+1):Math.max(res,i-stack.peek()); } } } return res; } }
参考:https://www.cnblogs.com/grandyang/p/4424731.html