leetcode32. 最长有效括号-java
题目所属分类
栈的相关例题
原题链接
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
代码案例:输入:s = “(()”
输出:2
解释:最长有效括号子串是 “()”
输入:s = “”
输出:0
题解
需要注意的是,如果一开始栈为空,第一个字符为左括号的时候我们会将其放入栈中,这样就不满足提及的「最后一个没有被匹配的右括号的下标」,为了保持统一,我们在一开始的时候往栈中放入一个值为 -1 的元素。
就是记录每个字串的起点前一个位置

合法括号就是: 左右数量相等
然后左括号数量>=右括号数量

合法序列不会横跨两条线
反证法证明:

就是栈里面存放的就是那个分界的右括号的下标
class Solution {
public int longestValidParentheses(String s) {
if(s.length() == 0) return 0 ;
int ans = 0 ;
Stack<Integer> st = new Stack<>();
st.push(-1);
for(int i = 0 ; i < s.length() ; i++){
char t = s.charAt(i);
if(t == '(') st.push(i);
else{
st.pop();
if(st.isEmpty()) st.push(i);
else ans = Math.max(ans,i-st.peek());
}
}
return ans ;
}
}

浙公网安备 33010602011771号