用 Python 编写程序,查找生成有效括号所需的最少删除次数
pythonserver side programmingprogramming更新于 2025/12/12 22:36:17
假设我们有一个字符串 s,其中有括号 '(' , ')' 和小写英文字符。我们必须从任意位置删除最少数量的括号('(' 或 ')'),以使生成的括号字符串有效,并且最终必须返回任何有效字符串。这里,当满足所有这些条件时,括号内的字符串有效 −
字符串为空且仅包含小写字符,或者
字符串可以写成 AB(A 与 B 连接),其中 A 和 B 是有效字符串,或者
字符串可以写成 (A) 的形式,其中 A 是有效字符串。
因此,如果输入为 s = "m)n(o)p",则输出为 "mn(o)p"
为了解决这个问题,我们将遵循以下步骤 −
stack := a new list
indexes := a new set
i := 0
对于 s 中的每个 c,执行
如果 c 与 '(' 相同,则
将 i 推入堆栈
否则,当 c 与 ')' 相同时,则
如果堆栈大小与 0 相同,则
将 i 插入索引
否则,
从堆栈弹出
i := i + 1
ret := 空字符串
索引 := 将所有元素存储到索引中
对于 i 在 0 到 s - 1 的大小范围内的情况,执行
如果 i 不在索引中,则
ret := ret + s[i]
返回 ret
示例
让我们看看下面的实现以便更好地理解 −
def solve(s):
stack = []
indexes = set()
i = 0
for c in s:
if c == '(':
stack.append(i)
elif c == ')':
if len(stack) == 0:
indexes.add(i)
else:
stack.pop()
i += 1
ret = ''
indexes = indexes.union(stack)
for i in range(len(s)):
if i not in indexes:
ret += s[i]
return ret
s = "m)n(o)p"
print(solve(s))
输入
"m)n(o)p"
输出
mn(o)p
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

