题目
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.
题意和思路
题意:在一个字符串中找出最大的满足连续括号匹配的个数
思路:将没有匹配的括号的下标记录下来,在它们之间的差值中找出最大值即可
python实现
|
|
补充
其实我这道题AC不是用的上面的思路,而是一种极为复杂的思路:
遍历s,对于字符’(‘,则进栈;对于字符’)’,判断前一个字符是否为’(‘,如果是则length+2,如果不是则让栈空,判断length和maxlength大小,并清空i;然后返回length和maxlength中的最大值
当然肯定没有通过
于是我对栈继续判断,栈中的情况只可能是空或者有多余的‘(‘对应的下标,然后对下标做处理,有这么几种情况:
- 最大值匹配的最后一个括号的下标小于栈中第一个’(‘对应的下标
- 最大值匹配的最后一个下标大于栈中第一个‘(’对应的下标
对于第1种情况,直接返回最大值即可
对于第2种情况,是这么处理的,计算栈中’(‘与‘(’下标之间的长度,并将最大值减去栈中所有长度的和sum,将其和栈中的长度lengthi相比,选取最大值返回(因为从第一个’(‘开始,对于最大值的增加都是不应该的)
这样有一个问题:假设最大值maxlength的前一个最大值maxpre,肯定有maxlength>maxpre,但是因为栈不为空,说明maxlength肯定多加了,而且满足第2种情况,于是按照上面的做法发现maxlength-sum后仍然比其中的lengthi都要大,但是却小于maxpre,上面返回的是maxlength-sum,但是实际上确实maxpre,因此在第二种情况返回时,需要取maxpre和maxlength-sum的最大值
代码如下,供参考:
启发
以后做算法题,可不能往复杂的想了,各种问题,幸好leetcode有很多示例,不然都不知道哪错了,做算法题思路一定要清晰,简洁