LeetCode——最长有效括号

Q:给出一个仅包含字符'('和')'的字符串,计算最长的格式正确的括号子串的长度。对于字符串"(()"来说,最长的格式正确的子串是"()",长度为2.再举一个例子:对于字符串")()())",来说,最长的格式正确的子串是"()()",长度为4.

A:所有错误的位置取出来,然后算中间正确的长度。

public static int longestValidParentheses(String s) {
        if (s.length() == 0)
            return 0;
        char[] c = s.toCharArray();
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < c.length; i++) {
            if (c[i] == '(') {
                stack.push(i);
            } else {
                if (stack.empty()) {
                    stack.push(i);
                } else {
                    if (c[stack.peek()] == '(') {
                        stack.pop();
                    } else {
                        stack.push(i);
                    }
                }
            }
        }
        //为了减少判断,在前面和后面放一个头一个尾
        int[] arr = new int[stack.size() + 2];
        arr[0] = -1;
        arr[arr.length - 1] = c.length;
        for (int i = arr.length - 2; i > 0; i--) {
            arr[i] = stack.pop();
        }
        int max = 0;
        for (int i = 1; i < arr.length; i++) {
            max = Math.max(max, arr[i] - arr[i - 1] - 1);
        }
        return max;
    }
原文地址:https://www.cnblogs.com/xym4869/p/12636641.html