题目:
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.
思路:
在栈中保存上一个"("的位置
package ds; import java.util.Stack; public class LongestValidParentheses { public int longestValidParentheses(String s) { int len; if (s == null || (len = s.length()) < 2) return 0; Stack<Integer> stack = new Stack<Integer>(); int max = 0; int lastIndex = -1; int i = 0; while (i < len) { if (s.charAt(i) == '(') { stack.push(i); } else { if (stack.isEmpty()) { lastIndex = i; } else { stack.pop(); if (stack.isEmpty()) { max = Math.max(max, i - lastIndex); } else { max = Math.max(max, i - stack.peek()); } } } ++i; } return max; } public static void main(String[] args) { // TODO Auto-generated method stub LongestValidParentheses l = new LongestValidParentheses(); System.out.println(l.longestValidParentheses("")); } }