最长的括号子串

/**
 * 【最长的括号子串】
 * 给出一个长度为 n 的,仅包含字符 '(' 和 ')' 的字符串,计算最长的格式正确的括号子串的长度。
 * "(()"     => 2
 * "(())"    => 4
 * 分析:栈——栈顶压入-1,遇到"("就把下标压栈,遇到")"就弹出一个数字扔掉,求当前角标-剩余栈顶角标值
 *
 * @author xuan
 * @create 2021-10-27 10:33
 **/
public class ZuiChangKuoHaoZiChuan {

    public static void main(String[] args) {
        String str = "())(())";
        System.out.println(longestValidParentheses(str));
    }

    public static int longestValidParentheses(String s) {
        int maxLen = 0;
        Deque deque = new ArrayDeque<>();
        deque.push(-1);
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(') {
                deque.push(i);
            } else {
                //只要是")"先弹栈扔一个
                deque.pop();
                if (deque.isEmpty()) {
                    //空了就push
                    deque.push(i);
                } else {
                    maxLen = Math.max(i - deque.peek(), maxLen);
                }
            }
        }
        return maxLen;
    }
}

你可能感兴趣的:(最长的括号子串)