使用 Python 查找平衡括号字符串所需的最少插入次数的程序
假设我们有一个字符串 s,其中包含开括号和闭括号 '(' 和 ')'。当满足以下条件时,我们可以说一个括号字符串是平衡的:
任何左括号 '(' 都对应两个连续的右括号 '))'。
左括号 '(' 必须在对应的两个连续右括号 '))' 之前。
例如,"())"、"())(())))" 是平衡的,但 ")()"、"()))" 不是。如果我们有这样的字符串,我们必须计算括号(开或闭)的数量以使字符串平衡。
因此,如果输入类似于 s = "(())))))",则输出将为 1,因为如果我们将其拆分,我们可以得到 "( ()) )) ))",所以我们需要一个左括号来使字符串 "( ()) ()) ))" 平衡。
为了解决这个问题,我们将遵循以下步骤:
o := 0,n := s 的大小
ret := 0,i := 0
当 i < n 时,执行以下操作:
如果 s[i] 与 '(' 相同,则
o := o + 1
否则,
如果 i + 1 < n 且 s[i + 1] 与 ')' 相同,则
如果 o 为 0,则
ret := ret + 1
否则,
o := o - 1
i := i + 1
否则,
ret := ret + 1
如果 o 为 0,则
ret := ret + 1
否则,
o := o - 1
i := i + 1
返回 ret + 2 * o
让我们看看以下实现,以更好地理解:
示例
def solve(s): o = 0 n = len(s) ret = 0 i = 0 while i < n: if s[i] == '(': o += 1 else: if i + 1 < n and s[i + 1] == ')': if not o: ret += 1 else: o -= 1 i += 1 else: ret += 1 if not o: ret += 1 else: o -= 1 i += 1 return ret + 2 * o s = "(())))))" print(solve(s))
输入
"(())))))"
输出
3
广告