代码如下:我如何进一步修改它以使其工作?
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