32. 最长有效括号
给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"
题目来源:力扣(LeetCode
转发请注明出处:https://www.cnblogs.com/WLCYSYS/p/13234043.html
- 本人看到题目后,最后总结了一种思路,用Stack。
- 用for()循环是为遍历给定字符串,用charAt可以取字符串,然后进行判断。
- 这里栈只储存左括号'(' ,见到右括号就把栈顶元素弹出,然后在用peek()进行计算。
- 需要找出最大的数字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; } }