题解 | #最长的括号子串#

最长的括号子串

https://www.nowcoder.com/practice/45fd68024a4c4e97a8d6c45fc61dc6ad

import java.util.*;


public class Solution {
    /**
     *
     * @param s string字符串
     * @return int整型
     */
     /**
    思路:保证栈中 只有栈底为最后的一个右括号,其余的位置只能放左括号

    遍历字符串
        如果当前字符是左括号加入栈中
        如果当前字符是右括号 则判断栈的大小
        如果栈的大小<=1 ,表示栈底要么没有元素 要么存在一个右括号
        将栈底元素更新为最新的右括号。
        如果栈的大小>1 ,表示栈中除了栈底的最右括号以外 还有一些左括号 那么把那些左括号弹出来 与右括号配对然后更新res值
      */
    public int longestValidParentheses (String s) {
        // write code here
        Stack<Integer> stack = new Stack<Integer>();

        stack.add(-1); //为满足最后一个右括号下标 我们将-1加入栈中
        int n = s.length();
        int res = 0;
        for (int i = 0 ; i < n ; i++) {
            if (s.charAt(i) == '(') {
                stack.add(i);
            } else {
                if (stack.size() > 1) {
                    stack.pop();
                    res = Math.max(res, i - stack.peek());
                }else {
                    stack.clear();
                    stack.add(i);
                }
            }
        }

        return res;
    }
}

全部评论

相关推荐

每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务