题目
给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"
方案:看到括号匹配想到Stack
class Solution {
public int longestValidParentheses(String s) {
if(s == null || s.length() < 2) return 0 ;
int ans = 0;
Stack<Integer> stack = new Stack<>( );
stack.push(-1);
for (int i = 0; i < s.length( ); i++) {
if (s.charAt(i) == '(') stack.push(i);
else if (s.charAt(i) == ')') {
if (!stack.isEmpty( )) {
stack.pop( );
if (stack.isEmpty()) stack.push(i);
else ans = Math.max(i-stack.peek(),ans);
}
}
}
return ans;
}
}
复杂度计算
杂记:Stack
Stack<Character> stack = new Stack<>( );
stack.push('s');
System.out.println(stack.peek( ));
System.out.println(stack.pop( ));
System.out.println(stack.isEmpty( ));