Leetcode刷题记——32. Longest Valid Parentheses(最长有效括号)

来源:互联网 发布:smt贴片机编程 编辑:程序博客网 时间:2024/06/11 16:37

一、题目叙述:

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.

For "(()", the longest valid parentheses substring is "()", which has length = 2.

Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4.

Subscribe to see which companies asked this question

二、解题思路:

本题即求最长有效括号序列长度,我自己想了好久, 没想出来,最后参考了别人的想法。

1、使用栈,遇到左括号,把左括号的下标入栈。

2、遇到右括号时,

(1)若此时栈内为空,则将序列开始标识start变为i + 1(说明之前有效括号序列终止重新开始)

(2)若此时栈不空,则出栈,若此时栈为空,计算有效序列长度为 i - start + 1,更新记录max;若此时栈不空,则计算有效序列长度为i - 栈顶元素值,更新记录max。

(3)最后max值即为最长有效括号序列长度。

三、源码:

import java.util.LinkedList;public class Solution{    public int longestValidParentheses(String s)     {        LinkedList<Integer> stack = new LinkedList<Integer>();        int start = 0, max = 0;        for (int i = 0; i < s.length(); i++)        {        if (s.charAt(i) == '(') stack.addFirst(i);//左括号入栈        else if (s.charAt(i) == ')')//若为右括号        {        if (stack.size() == 0)        start = i + 1;        else         {        stack.removeFirst();        if (stack.size() == 0)        {        if (i - start + 1 > max)        max = i - start + 1;        }        else        {        if (i - stack.getFirst() > max)        max = i - stack.getFirst();        }                }        }                }        return max;    }    public static void main(String[] args)      {          Solution sol = new Solution();          String s = ")()())";        System.out.println(sol.longestValidParentheses(s));      }  }


0 0