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.java
给定一个字符串,只包含小括号号,求最长的合法的小括号的数目。算法
使用栈来实现spa
算法实现类.net
import java.util.Deque; import java.util.LinkedList; import java.util.Stack; public class Solution { public int longestValidParentheses(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; } }