给您一个仅包含和谐的字符串,以找到最长有效(正确的格式和连续)括号的长度。示例1:
输入:s =“((((((((((((((((((((((((((((((((((((((((()到,
输入:s =“)()()()”输出:4说明:最长的有效括号字符串为“()()”示例3:
输入:s =“”输出:0
暗示:
0 <= s.length <= 3 * 104 s [i]是'('or')'
在此方法中,我们使用两个计数器extit {left {左}左将{右}右。首先,我们从左到右将字符串日历。对于每个ext {'('}'('(',我们添加extit {left}左计数器,对于每个ext {'}'遇到的',我们添加extit {右}右counter。计数器等于extit {右}右计数器,我们计算当前有效字符串的长度,并记录到迄今为止找到的最长子线。,我们将同时更改Extit {左}左},然后更改{右}右后00。
这种方法考虑了当前字符末尾的有效括号长度。我们将角色扔到了右支架数量之前,而不是左括号的数量。但是,这会错过一种情况,也就是说,遍历过程中的左括号数始终大于右支架的数量),目前找不到最长的有效括号。
解决方案也很简单。我们只需要使用从右到左的类似方法进行计算,但是目前,判断条件逆转:
当extit {左}左计数器大于extit {右}右计数器时,我们将在同一时间转动extit {左}左}左}左{右}右},我们计算当前的长度有效的字符串,并记录到目前为止发现的最长的子弦