leetcode32(最长有效括号)--Java语言实现
求: 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 题目链接: https://leetcode-cn.com/problems/longest-valid-parentheses/ 解: 1、利用栈 这道题是经典的栈应用:判断字符串左右括号是否能够匹配的变式,在判断左右括号能否匹配的时,我们将左括号入栈,然后每遇到右括号就出栈,最后判断栈是否为空,空代表匹配,不空代表不匹配。 在这道题里,因为我们要判断的是最大匹配的长度,因此入栈的元素应该是字符在数组里的索引。我们让栈底元素代表最后一个')'对应的索引(初始的时候栈底设置为-1),而栈里的其他元素则存放每一次遇到'('时的索引。然后我们如果遇到'('则将相应索引入栈,遇到')',弹出栈顶元素。如果发现栈为空,说明当前给出的是')',且')'的数量超过了'('的数量,将最新')'的索引入栈。如果栈不空,记录截止目前的匹配长度,最后在所有的匹配长度中,选取一个最大者返回。 时间复杂度:O(N) 空间复杂度:O(N) public int longestValidParentheses (String s) { Deque