LeetCode 32最长有效括号

题目描述:给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
示例
输入: “(()”
输出: 2
解释: 最长有效括号子串为 “()”

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

思路:

  1. 这道题和“有效括号”类似。首先需要找到哪些括号是有效的,可以借助栈来完成,遍历字符串,压入’(’,遇到’)’,退栈,这时就找到了两个相互对应的一组括号。
  2. 要求是最长的括号字串,则需要在前面退栈的过程中记录括号的位置,之后在遍历,寻找最长的连续字串即可

代码(Java):

class Solution {
    public int longestValidParentheses(String s) {
        int point = -1;     //栈的指针
        int[] stack = new int[s.length()];    //栈,压入'('位置
        int[] get = new int[s.length()+1];    //记录有效括号的位置  
        char[] str = s.toCharArray();
        for (int i = 0; i < str.length; i++){
            if (str[i] == '('){              //入栈
                stack[++point] = i;
            }else if (point >= 0){           //遇到')'出栈
                int pr = stack[point--];
                get[i] = get[pr] = 1;
            }else{
                continue;
            }
        }
        int re = 0, count = 0;
        for (int i = 0; i <= str.length; i++){   //寻找最长的连续子串
            if (get[i] == 1) count++;
            else{
                re = re > count? re : count;
                count = 0;
            }
        }
        return re;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值