private static int longestValidParentheses(String s) {
		int result = 0;
		int tmp = 0;
		char[] cs = s.toCharArray();
		Stack<Integer> st = new Stack<Integer>();
		for(int i = 0;i < cs.length; i++) {
			if (st.isEmpty()) {
				st.push(i);
			} else {
				if (cs[i] == ')' && cs[st.peek()] == '(') {
					st.pop();
				} else {
					st.push(i);
				}
			}
		}
		if (st.isEmpty()) {
			result = cs.length;
		} else {
			st.push(cs.length);
			while(!st.isEmpty()) {
				tmp = st.pop() ;
				tmp = st.isEmpty() ? tmp: (tmp - st.peek() - 1);
				result = result < tmp ? tmp : result; 
			}
		}
		return result;
	}