掘金团队号上线,助你 Offer 临门! 点击 查看大厂春招职位
一、题目描述:
给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例 1:
输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"
示例 2:
输入:s = ")()())"
输出:4
解释:最长有效括号子串是 "()()"
示例 3:
输入:s = ""
输出:0
题目地址:leetcode-cn.com/problems/lo…
二、思路分析:
采用栈,判断栈顶元素与当前元素是否匹配,匹配成功则弹出,不成功则压入栈,入栈的是索引值,不是字符。
遇到 '(' 入栈索引值
遇到 ')' 先出栈,
如果栈为空,直接入栈
如果栈不空,用当前索引减去栈顶索引,即得新的有效格式的长度。
三、AC 代码:
public static int longestValidParentheses(String s) {
int ans = 0;
Stack<Integer> stack = new Stack<>();
stack.push(-1);
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(') {
stack.push(i);
} else {
stack.pop();
if (stack.empty()) {
stack.push(i);
} else {
ans = i - stack.peek() > ans ? i - stack.peek() : ans;
}
}
}
return ans;
}
四、总结:
一定要注意题目是 最长 有效括号,并不是判断参数 s 是否是有效括号。