1. 程式人生 > 其它 >LeetCode No32. 最長有效括號

LeetCode No32. 最長有效括號

題目

給你一個只包含 '(' 和 ')' 的字串,找出最長有效(格式正確且連續)括號子串的長度。

示例 1:

輸入:s = "(()"
輸出:2
解釋:最長有效括號子串是 "()"

示例 2:

輸入:s = ")()())"
輸出:4
解釋:最長有效括號子串是 "()()"

示例 3:

輸入:s = ""
輸出:0

提示:

0 <= s.length <= 3 * 10^4
s[i] 為 '(' 或 ')'

思路

字元裡面只含有"(" 或者 ")",其實就是一個括號匹配問題,把左括號的下標存起來,然後遍歷陣列,遇到不匹配的情況,就拿出來,用當前下標減去當前棧頂的下標,得出的值就是有效括號的長度。

AC程式碼

點選檢視程式碼
class Solution {
    public int longestValidParentheses(String s) {
        int maxans = 0;
        Deque<Integer> stack = new LinkedList<Integer>();
        stack.push(-1);
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') {
                stack.push(i);
            } else {
                stack.pop();
                if (stack.isEmpty()) {
                    stack.push(i);
                } else {
                    maxans = Math.max(maxans, i - stack.peek());
                }
            }
        }
        return maxans;
    }
}