题解 | #最长的括号子串#
最长的括号子串
http://www.nowcoder.com/practice/45fd68024a4c4e97a8d6c45fc61dc6ad
题目
给出一个仅包含字符'('和')'的字符串,计算最长的格式正确的括号子串的长度。
对于字符串"(()"来说,最长的格式正确的子串是"()",长度为2.
再举一个例子:对于字符串")()())",来说,最长的格式正确的子串是"()()",长度为4.
解题思路
通常匹配问题,都会有先后顺序,就本题来说,判断括号是否匹配,即左右括号是否能够完全抵消,当有一个右括号就需要一个左括号,因为可以采用栈来实现算法
public static int longestValidParentheses (String s) { // write code here Stack<Integer> stack = new Stack<>(); int last = -1; int maxSize = 0; for(int i = 0 ; i < s.length() ; i++){ if(s.charAt(i) == '('){ stack.push(i); }else { if (stack.isEmpty()){ last = i; }else { stack.pop(); if (stack.isEmpty()){ maxSize = Math.max(maxSize,i-last); }else { maxSize = Math.max(maxSize,i-stack.peek()); } } } } return maxSize; }