Python输入一组字符串,已知所给字符串只包含“(”和“)”,请使用顺序查找,求出最长的合法括号子串的长度。例如所给字符串为()()()),则最长的合法括号子串为()()(),因此输出该子串的长度6。 输入:()()() 输出:6
时间: 2024-12-23 10:17:19 浏览: 9
在Python中,解决这个问题可以使用栈数据结构。顺序查找在这种情况下并不合适,因为它需要遍历整个字符串以寻找匹配的括号对,而栈可以帮助我们更高效地找到最长的合法括号子串。
算法步骤如下:
1. 初始化一个空栈和一个变量`max_len`用于存储最长子串的长度,默认值为0。
2. 遍历输入的字符串中的每个字符,如果遇到左括号“(”,将其压入栈中。
3. 如果遇到右括号“)”,检查栈顶元素是否是对应的左括号(即栈顶元素是"(")。如果是,说明找到了一对合法括号,将当前子串的长度(`stack[-1] + 1`,因为`stack[-1]`是左括号)加到`max_len`上,并从栈中弹出这个左括号。如果不是,说明当前右括号不是合法的闭合,忽略它。
4. 当遍历完所有字符后,返回`max_len`作为最长合法括号子串的长度。
以下是具体的Python代码实现:
```python
def longest_valid_parentheses(s):
if not s:
return 0
stack = []
max_len = 0
for i in range(len(s)):
if s[i] == ')':
# 如果栈为空或栈顶元素是左括号
if not stack or stack[-1] != '(':
stack.append(s[i]) # 不合法的右括号直接丢弃
else:
# 合法括号对
max_len += 2
stack.pop()
else:
stack.append(s[i])
# 检查是否有剩余的未配对的左括号
while stack and stack[-1] == '(':
max_len += 2
stack.pop()
return max_len
# 测试示例
input_str = "()()())"
print(longest_valid_parentheses(input_str)) # 输出: 6
```
阅读全文