在Python中找到给定字符串中最长有效括号的长度
假设我们有一个字符串s。这个字符串包含打开和关闭括号。我们要找到最长有效(格式正确)的括号子字符串的长度。因此,如果输入为“))(())()”,则结果将为6,因为有效字符串为“(())()”。
为了解决此问题,我们将遵循以下步骤 −
- 创建一个堆栈,并插入-1,设置ans := 0
-
对于i在范围0到堆栈长度-1之间
- 如果s[i]是打开括号,则将i插入堆栈
-
否则
- 如果堆栈不为空且堆栈顶部不是-1,s[堆栈顶部]是打开括号,则
-
弹出堆栈顶部元素
-
ans := ans和i-堆栈顶部的最大值
-
否则将i插入堆栈
-
返回ans
示例
让我们看以下实现以获得更好的理解−
class Solution(object):
def solve(self, s):
stack = [-1]
ans = 0
for i in range(len(s)):
if s[i] == "(":
stack.append(i)
else:
if stack and stack[-1]!=-1 and s[stack[-1]] == "(":
stack.pop()
ans = max(ans,i - stack[-1])
else:
stack.append(i)
return ans
ob = Solution()
print(ob.solve("))(())())"))
输入
"))(())())"
输出
6