为什么这个用于检查平衡括号的代码对输入"( } )"不起作用?



代码如下:我如何进一步修改它以使其工作?

def isValid(self, s):
stack=[]
for i in range(len(s)):
if(s[i]=='(' or s[i]=='{' or s[i]=='['):
stack.append(s[i])
else:
if not stack:
return False
elif(len(stack)!=0 and (s[i]==')' and stack[-1]=='(' or s[i]=='}' and stack[-1]=='{'
or s[i]==']' and stack[-1]=='[')):
stack.pop()
if stack:
return False
else:
return True

修复代码的最快方法是添加

else:
return False

elif块之后。如果s[i]')','}'']'中的一个,并且stack[-1]不是相应的'(','{''[',那么我们知道在字符串中存在一个非平衡的圆括号,大括号或括号集合。

如果你感兴趣,下面,我修改了你的代码,使我发现更清晰和可读。

d是一个字典,其中键是')','}',']'(右括号,大括号和括号)中的一个,关联值为'(','{','['(左括号,大括号和括号)。stack最初是一个空列表。当我们遍历字符串s的字符时,

  • 如果字符ch是字典d中的一个值(即开头字符之一),则该字符被附加到stack;
  • 如果字符ch是字典d中的关键字之一(即其中一个结束字符),则必须最后附加到stack的值是相应的开始字符;如果这是真的,stack必须是非空的,并且stack的最后一个附加值stack[-1]必须等于d[ch],这是相应的匹配开始字符(例如,如果ch'}',那么stack[-1]必须等于d[ch] = '{')。如果为真,则删除列表的最后一个元素。如果stack为空或d[ch] != stack[-1]True,则表示字符串中存在一组不平衡的圆括号、大括号或尖括号,因此返回False

如果我们能够在不执行return False语句的情况下遍历整个字符串,我们需要确保stack为空。如果字符串有开始字符但没有结束字符,stack此时将是非空的。

代码:

def isValid(s):
d = {')': '(', '}': '{', ']': '['}
stack = []
for ch in s:
if ch in d.values():
stack.append(ch)
if ch in d:
if stack and d[ch] == stack[-1]:
stack.pop()
else:
return False
return False if stack else True

相关内容

最新更新