欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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刷题