import java.util.Stack;
//用栈,妙就妙在做差是与垫底的那个元素做差,而不是对应的括号的下标
//对于遇到的每个( ,我们将它的下标放入栈中。
//对于遇到的每个) ,我们弹出栈顶的元素并将当前元素的下标与弹出元素下标作差,
//得出当前有效括号字符串的长度。通过这种方法,我们继续计算有效子字符串的长度,
//并最终返回最长有效子字符串的长度。
public class Solution {
public int longestValidParentheses(String s) {
int max = 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 {
//因为有个-1垫底,所以不会出现越界异常
stack.pop();
//如果为空,把当前值放入栈,替换前面垫底的元素
if (stack.isEmpty()) {
stack.push(i);
}
//如果不为空,则把栈顶元素弹出来,与当前元素做差,然后和max比较,留大的那个值
else {
max = Math.max(max, i - stack.peek());
}
}
}
return max;
}
}
leetcode32. 最长有效括号
最新推荐文章于 2024-05-24 09:14:05 发布