最长有效括号

给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。

示例 1:

输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:

输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
    public int longestValidParentheses(String s) {
        Stack<Integer> stack=new Stack();
        Stack<String> stringStack=new Stack<>();
        for (int i=0;i<s.length();i++){
            if(stack.size()==0){
                stack.push(i);
                stringStack.push(s.substring(i,i+1));
            }else {
                if(s.substring(i,i+1).equals(")")&&stringStack.peek().equals("(")){
                    stringStack.pop();
                    stack.pop();
                }else {

                    stringStack.push(s.substring(i,i+1));
                    stack.push(i);
                }
            }
        }
        int max=0;
        if(stack.size()==0){
            return s.length();
        }else if(stack.peek()!=s.length()-1){
            stack.push(s.length());
        }else {
            stack.push(s.length()-1);
        }
        if(stack.size()==1){
            return s.length();
        }else {
            while (stack.size()!=1){
                int temp=stack.pop()-stack.peek()-1;
                if(temp>max){
                    max=temp;
                }
            }
        }
        if(stack.size()==1){
            int temp=stack.pop();
            if(temp>max){
                max=temp;
            }
        }
        return max;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容