public int longestValidParentheses(String s) {
		if (s == null || s.length() < 2)
			return 0;
		int[] A = new int[s.length() + 1];
		A[0] = 0;
		A[1] = 0;
		int max = 0;
		for (int i = 2; i <= s.length(); i++) {
			if (s.charAt(i - 1) == '(')
				A[i] = 0;
			else {
				if (s.charAt(i - 2) == '(') {
					A[i] = A[i - 2] + 2;
				}
				else if (i - A[i - 1] - 2 >= 0 && s.charAt(i - A[i - 1] - 2) == '(') {
					A[i] = A[i - 1] + 2;
					if (A[i - A[i - 1] - 2] > 0)
						A[i] += A[i - A[i - 1] - 2];
				}
				else
					A[i] = 0;
			}
			max = Math.max(max, A[i]);
		}
		return max;
	}