Python程序:查找使括号有效所需的最少删除次数
假设我们有一个包含括号 '('、')' 和小写英文字母的字符串 s。我们必须删除最小数量的括号('(' 或 ')',从任何位置)以便生成的括号字符串有效,并最终返回任何有效的字符串。这里的括号字符串在满足所有这些条件时才是有效的:
字符串为空且仅包含小写字符,或者
字符串可以写成 AB(A 与 B 连接)的形式,其中 A 和 B 是有效的字符串,或者
字符串可以写成 (A) 的形式,其中 A 是一个有效的字符串。
因此,如果输入类似于 s = "m)n(o)p",则输出将是 "mn(o)p"
为了解决这个问题,我们将遵循以下步骤:
stack := 新建一个列表
indexes := 新建一个集合
i := 0
对于s中的每个字符c,执行:
如果c 等于 '(',则
将i压入栈中
否则,如果c 等于 ')',则
如果栈的大小等于 0,则
将i插入到indexes中
否则,
从栈中弹出
i := i + 1
ret := 空字符串
indexes := 将所有元素存储到indexes中
对于从0到s的大小-1的范围内的每个i,执行:
如果i不在indexes中,则
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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP