【发布时间】:2017-12-06 18:43:59
【问题描述】:
我正在学习如何编码,如果有任何意见,我将不胜感激。这是我为解决 Leetcode 上的一个简单问题而编写的代码。
问题是当第一次dict_ab[deck[-1]] == s[i+1]时,在执行deck.pop()之后,会迭代i到i+=2。然而这并没有发生,我自动只有 +=1。我做错了什么?我已经研究了一整天,无法弄清楚。
class Solution:
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
a = ('(','{','[')
b = (')','}',']')
dict_ab = dict(zip(a,b))
import collections
if (len(s) % 2 == 1) or (len(s) == 0):
return False
else:
deck = collections.deque()
#deck.append(s[0])
#print(s[0])
#print(len(s))
for i in range(0, len(s), 1):
#print(i)
deck.append(s[i])
#print(deck)
if dict_ab[deck[-1]] == s[i+1]:
deck.pop()
#print(deck)
i +=2
elif dict_ab[deck[-1]] != s[i+1]:
deck.append(s[i])
i +=1
if len(deck) > 0:
return False
return True
s = ('()[]')
result = Solution().isValid(s)
print(result)
我看到的结果如下:
KeyError Traceback (most recent call last) <ipython-input-9-56d864c71658> in <module>() 37 return True 38 s = ('()[]') ---> 39 result = Solution().isValid(s) 40 print(result) <ipython-input-9-56d864c71658> in isValid(self, s) 23 print(deck) 24 ---> 25 if dict_ab[deck[-1]] == s[i+1]: 26 deck.pop() 27 print(deck) KeyError: ')'
【问题讨论】:
-
如果您添加通用的
python标签,将会有更多人看到您的问题。但是你需要解释你的程序应该做什么。看起来您正在尝试测试匹配的括号或类似的东西。你得到了KeyError,因为dict_ab的键中没有右括号。您可能会发现 this answer 很有帮助。 -
嗨@PM2Ring 感谢您的回复!我试图不透露太多信息,因为这是关于 Leetcode 的问题。但是,是的,您是正确的,问题是要找到匹配的括号。我已经解决了。我会在这里发布答案。我昨天在这里发布的原始解决方案没有正确执行叠瓦条件,因此执行起来是个问题。 (我在这里添加我更正的解决方案 - 但我不知道这是否可以 - 如果不是,请告知,我将删除问题和解决方案。
标签: python python-3.x