所以我应该解决一个算法问题,如果你有" {}"或"()"或" []"字符串有效 - 如果相关的括号打开并且彼此相邻,它们是有效的,您可以继续解析字符串。
这是我的代码:
def isValid(self, s):
if len(s) <= 1:
return False
compare = ""
for i, element in enumerate(s):
compare = ""
compare += (element)
if compare == "(":
if s[i + 1] == ")":
continue
else:
return False
if compare == '{':
if s[i + 1] == '}':
continue
else:
return False
if compare == '[':
if s[i + 1] == ']':
continue
else:
return False
return True
围绕计算&#34;)&#34;也就是第一个if语句,它超出了范围。
抛出错误:运行时错误消息:
Line 14: IndexError: string index out of range
Last executed input:
"){"
我用#34;){{])&#34;等字符串对此进行了测试。并且它正确返回false。但是,它会在&#34;){&#34;
上出错为什么会这样?
更新:忘记索引。我无法理解为什么。当我们检查时,索引值应该是i,它仍然是索引0 ...我只是没有得到它。所以我重写了代码并使用了堆栈:
def isValid(self, s):
stack = []
dict = {"]":"[", "}":"{", ")":"("}
for char in s:
if char in dict.values():
stack.append(char)
elif char in dict.keys():
if stack == [] or dict[char] != stack.pop():
return False
else:
return False
return stack == []
答案 0 :(得分:1)
此处i
是s
的索引:
for i, element in enumerate(s):
但稍后您尝试在i+1
处编制索引:
if s[i + 1]
如果i
是s
的最后一个索引,并且您将s
的一侧编入索引,则会失败。
答案 1 :(得分:1)
我用一个字符串测试了这个,例如“){{])”,它返回false 正确。但是,它会在“){”
上出错为什么会这样?
让我们分解您的代码:
1。)s = "){"
,s
有2个元素,即:
element: ) {
index: 0 1
2。)当你enumerate(s)
时,迭代运行两次:
3。)第一次迭代,i == 0
,您正在测试s[0] == ")"
4.)您的代码没有条件直接在迭代下检查s[0] == ")"
,因此没有任何反应。
5.。)第二次迭代,i == 1
,您正在对s[1] == "{"
进行测试
6.)您的代码具有检查if compare == '{':
的条件(s[1] == "{"
)。 if
条件现已激活。现在您的代码尝试执行以下操作:
if s[i + 1] == '}':
7。)你正处于第二次(也是最后一次)迭代。 if
语句尝试让s[i + 1]
来测试条件。但s[1 + 1]
s[2]
。{。}
8.)回想你's'中的元素和索引:
element: ) {
index: 0 1
^
doesn't exist
9。)s[2]
不存在。 Python翻转并大吼大叫请求索引超出范围。
忘记索引。我只是不明白为什么。
不要。你永远会犯同样的错误。
学习,理解并克服它。这是改善的唯一方法。