public int longestValidParenthesesII(String s) {
        if (s == null || s.length() < 2)
            return 0;
        Stack<Integer> S = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            if (!S.isEmpty() && s.charAt(i) == ')' && s.charAt(S.peek()) == '(')
                S.pop();
            else 
            	S.push(i);
        }
        int i = s.length(), j = 0, max = 0; 
        while (!S.isEmpty()) {
            j = i;
            i = S.pop();
            max = Math.max(j - i - 1, max);
        }
        return Math.max(i, max);
    }