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.
import java.util.Stack; /** * Created by lxw, liwei4939@126.com on 2018/3/6. */ public class LongestValidParentheses { public int longestValidParenthese(String s){ Stack<Integer> st = new Stack<>(); int max = 0; for (int i= 0; i < s.length(); i++){ //如果当前字符是右括号,记录栈非空且栈顶对应为左括号 if (s.charAt(i) == ')' && !st.isEmpty() && s.charAt(st.peek()) == '('){ //左括号出栈 st.pop(); //与当前右括号最近的左括号出栈后,栈要么为空,要么为右括号,要么为左括号 max = Math.max(max, i - (st.isEmpty() ? -1 : st.peek())); } else { st.push(i); } } return max; } public static void main(String[] args){ LongestValidParentheses tmp = new LongestValidParentheses(); String str = ")()())"; System.out.println(tmp.longestValidParenthese(str)); } }PS: JAVA 中Stack是一个古老的类,JDK文档中只有empty()方法,isEmpty()是从Vector类中继承过来的,程序中使用前者运行超时,使用后者通过