Skip to content

list里面存的是没有匹配的'('的索引, 那么每次匹配的到的时候, 就可以通过(i - 最近的没有匹配到的'('的index), 来计算得到当前的连续括号长度, 初始化的时候stack里面存一个-1来作为哨兵 @param s @return

java
class Solution {
    /**
     * list里面存的是没有匹配的'('的索引,
     * 那么每次匹配的到的时候, 就可以通过(i - 最近的没有匹配到的'('的index),
     * 来计算得到当前的连续括号长度, 初始化的时候stack里面存一个-1来作为哨兵
     * @param s
     * @return
     */
    public int longestValidParentheses(String s) {
        int ans = 0;
        List<Integer> l = new ArrayList<>();
        l.add(-1);
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') {
                l.add(i);
            } else if (l.size() > 1){
                l.remove(l.size() - 1);
                ans = Math.max(ans, i - l.get(l.size() - 1));
            } else {
                l.set(0, i);
            }
        }
        return ans;
    }
}

Personal Knowledge Base