leetcode【每日一题】32. 最长有效括号 Java
程序员文章站
2022-07-12 23:16:56
...
题干
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"
想法
栈,栈底存尚未匹配的最后一个)的位置
遍历数组
(的话直接放入栈
)的话,栈顶出去
如果栈为空,说明当前的右括号为没有被匹配的右括号,我们将其下标放入栈中来更新我们之前提到的「最后一个没有被匹配的右括号的下标」
如果栈不为空,当前右括号的下标减去栈顶元素即为「以该右括号为结尾的最长有效括号的长度」
java代码
package daily;
import java.util.Stack;
public class LongestValidParentheses {
public int longestValidParentheses(String s) {
int maxres=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 {
maxres=Math.max(maxres,i-stack.peek());
}
}
}
return maxres;
}
public static void main(String[] args){
String s=")()())";
LongestValidParentheses longestValidParentheses=new LongestValidParentheses();
System.out.println(longestValidParentheses.longestValidParentheses(s));
}
}
我的leetcode代码都已经上传到我的githttps://github.com/ragezor/leetcode
上一篇: leetcode每日一题
下一篇: LeetCode探索(滑动窗口)