python - 如何检查python 3中的不平衡括号?
问题描述
如何检查不平衡的括号?我正在考虑括号 --> {
, [
, (
, )
, ]
, }
. 如何检查字符串是否不平衡?
例子:
{[()]}
--> 平衡{[(])}
--> 不平衡{{[[(())]]}}
--> 平衡
我正在尝试这种方式,但它不起作用:
string = '{[(])}'
par = 0
col = 0
cha = 0
for i in string:
if i == '{':
cha+=1
if i == '}':
cha-=1
if i == '[':
col+=1
if i == ']':
col-=1
if i == '(':
par+=1
if i == ')':
par-=1
if (cha < 0) or (col < 0) or (par < 0):
print('Unbalanced')
break
if (cha != 0) or (col != 0) or (par != 0):
print('Unbalanced')
else:
print('Balanced')
解决方案
我认为您无法仅通过跟踪到目前为止您看到的每个字符的数量来验证字符串的平衡性。你看到它们的顺序也很重要,所以你必须以一种或另一种方式结合这种状态。这是一种方法——保留一堆“不匹配”的括号。当你找到一个新的左括号时添加它,当你找到一个与最近的左括号匹配的右括号时弹出它,如果你期望匹配但没有得到匹配,则返回 False。如果到达列表的末尾并且堆栈为空,则字符串是平衡的。
def balanced(s):
pairs = {"{": "}", "(": ")", "[": "]"}
stack = []
for c in s:
if c in "{[(":
stack.append(c)
elif stack and c == pairs[stack[-1]]:
stack.pop()
else:
return False
return len(stack) == 0
test_cases = ("{[()]}", "{[(])}", "{{[[(())]]}}")
for s in test_cases:
print(s, balanced(s))
结果:
{[()]} True
{[(])} False
{{[[(())]]}} True
推荐阅读
- php - 网上商店需要添加到购物车按钮对齐
- javascript - 在javascript中达到特定数字时如何从x++到x--间隔?
- python - 遍历 Python 中的字符串列表
- java - JInternalFrame - 非法组件位置
- python - 并发任务确定性地生成伪随机数
- html - 如何将导航元素定位在标题元素下?
- angular - 将嵌套对象从角度绑定到 webapi
- python - 如何在 tensorflow 中训练卷积滤波器
- javascript - 为什么我会得到 Promise {
在 Promise.all 中使用 fetch 时? - c - 指针时无法使用箭头符号访问结构数据