1. 问题描述:
一个合法的括号序列满足以下条件:
序列()被认为是合法的。
如果序列X与Y是合法的,则XY也被认为是合法的。
如果序列X是合法的,则(X)也是合法的。
例如,(),()(),(())这些都是合法的。
现在,给定一个由 ( 和 ) 组成的字符串。请你求出其中的最长合法括号子序列的长度。注意,子序列不一定连续。
输入格式
共一行,一个由 ( 和 ) 组成的字符串。
输出格式
一个整数,表示最长合法括号子序列的长度。
数据范围
前五个测试点满足, 1 ≤ 输入字符串的长度 ≤ 10。
所有测试点满足,1 ≤ 输入字符串的长度 ≤ 10 ^ 6。
输入样例1:
(()))(
输出样例1:
4
输入样例2:
()()(()(((
输出样例2:
6
来源:https://www.acwing.com/problem/content/description/4210/
2. 思路分析:
分析题目可以知道我们需要求解出匹配括号的数量,括号匹配可以使用栈,除了使用栈进行匹配之外我们可以使用两个变量进行维护,模拟匹配的过程即可。
3. 代码如下:
class Solution:
def process(self):
s = input()
res = 0
stack = list()
for c in s:
if c == "(":
stack.append(c)
elif c == ")":
if stack:
stack.pop()
res += 2
return res
if __name__ == '__main__':
print(Solution().process())
class Solution:
def process(self):
s = input()
l = r = 0
for c in s:
if c == "(":
l += 1
elif l > 0:
l -= 1
r += 1
return r * 2
if __name__ == '__main__':
print(Solution().process())