题目:
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.
题意:
给定一个字符串值包含字符‘(‘
and ‘)‘,
找出最长有效括号子串。
对于 "(()"
,最长有效子串为"()",长度为2.
另一个例子是")()())",其中的最长有效括号子串为"()()",长度为4.
算法分析:
- stack里面装的一直是“还没配好对的那些可怜的括号的index”
- 是’(‘的时候push
- 是’)‘的时候,说明可能配对了;看stack top是不是左括号,不是的话,push当前右括号
- 是的话,pop那个配对的左括号,然后update res:i和top的(最后一个配不成对的)index相减,就是i属于的这一段的当前最长。如果一pop就整个栈空了,说明前面全配好对了,那res就是最大=i+1
AC代码:
public class Solution { public int longestValidParentheses(String s) { int res = 0; Stack<Integer> stack = new Stack<Integer>(); char[] arr = s.toCharArray(); for (int i = 0; i < arr.length; i++) { if (arr[i] == ')' && !stack.isEmpty() && arr[stack.peek()] == '(') { stack.pop(); if (stack.isEmpty()) res = i + 1; else res = Math.max(res, i - stack.peek()); } else { stack.push(i); } } return res; } }
版权声明:本文为博主原创文章,转载注明出处
时间: 2024-11-05 18:35:22