我正在尝试在 python 中解决以下问题(不是为了任何事情,只是想学习如何编码),并且我不断收到超出时间限制的错误。
给定一个仅包含字符 ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[‘ 和 ‘]’ 的字符串 s,确定输入字符串是否有效。 输入字符串在以下情况下有效: 开括号必须用相同类型的括号闭合。 开括号必须以正确的顺序闭合。
给定一个仅包含字符 ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[‘ 和 ‘]’ 的字符串 s,确定输入字符串是否有效。
输入字符串在以下情况下有效:
有人可以解释为什么代码不会运行吗?
关于我的逻辑的详细信息:我正在尝试检查输入是否有任何值(或者立即返回 true),然后检查它是否有任何紧挨着的括号。这个想法是每个真正的输入必须在字符串中的某处有“()”、“[]”或“{}”。然后,我会删除这些对,直到没有更多字符并且我知道它是真的,或者它找不到任何字符并且它是错误的。
如果这是思考问题的糟糕方式,并且您打算提供不同的方式,请帮助我理解为什么此代码无法运行。
class Solution: def isValid(self, s: str) -> bool: l = ['()','[]','{}'] while s != '': while l[0] in s or l[1] in s or l[2] in s: try: s.replace(s[s.index(l[0])],'') except: ValueError try: s.replace(s[s.index(l[1])],'') except: ValueError try: s.replace(s[s.index(l[2])],'') except: ValueError continue return False return True
s.replace(...)返回修改后的字符串。它没有s就地修改;它不能,因为字符串是不可变的。
s.replace(...)
s
还有其他错误,但我将把它们留作练习让你弄清楚。解决这个问题至少会让你越过无限循环。