1、题目描述
给你一个只包含 '('
和 ')'
的字符串,找出最长有效(格式正确且连续)括号子串的长度。
2、算法分析
这题栈是最容易想到的办法。
①对于遇到的每个‘(’ ,我们将它的下标放入栈中
②对于遇到的每个‘)’ ,我们先弹出栈顶元素表示匹配了当前右括号:
如果栈为空,说明当前的右括号为没有被匹配的右括号,我们将其下标放入栈中来更新我们之前提到的「最后一个没有被匹配的右括号的下标」
如果栈不为空,当前右括号的下标减去栈顶元素即为「以该右括号为结尾的最长有效括号的长度」注意是通过下标来找最长的系列。
![]()
![]()
![]()
![]()
![]()
![]()
3、代码实现
class Solution {
public int longestValidParentheses(String s) {
int res = 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{
stack.pop();
if(stack.isEmpty()){
stack.push(i);
}else{
res = Math.max(res,i - stack.peek());
}
}
}
return res;
}
}