32. 最长有效括号

32. 最长有效括号

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

示例 1:

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

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

题目来源:力扣(LeetCode
转发请注明出处:https://www.cnblogs.com/WLCYSYS/p/13234043.html

  1.   本人看到题目后,最后总结了一种思路,用Stack。
  2.   用for()循环是为遍历给定字符串,用charAt可以取字符串,然后进行判断。
  3.   这里栈只储存左括号'(' ,见到右括号就把栈顶元素弹出,然后在用peek()进行计算。
  4.   需要找出最大的数字maxans。
class Solution {

    public int longestValidParentheses(String s) {

        int maxans = 0;
        
        Stack<Integer> stack = new Stack<Integer> ();

        stack.push(-1);

        for (int i = 0; i < s.length(); i++){
           
            if (s.charAt(i) == '(') {
               
                stack.push(i);

            } else {
                //移除并返回栈顶元素
                stack.pop();

                if (stack.empty()) {

                    stack.push(i);

                } else {
                    //peek()方法提供栈顶元素,但是并不将其从栈顶移除。
                    maxans = Math.max(maxans, i - stack.peek());

                }
            }
        }
        return maxans;
    }
    
}

 

posted @ 2020-07-04 10:32  小树木  阅读(138)  评论(0编辑  收藏  举报