一尘不染

有效括号问题中超出时间限制

python

我正在尝试在 python 中解决以下问题(不是为了任何事情,只是想学习如何编码),并且我不断收到超出时间限制的错误。

给定一个仅包含字符 ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[‘ 和 ‘]’ 的字符串 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


阅读 103

收藏
2022-06-12

共1个答案

一尘不染

s.replace(...)返回修改后的字符串。它没有s就地修改;它不能,因为字符串是不可变的。

还有其他错误,但我将把它们留作练习让你弄清楚。解决这个问题至少会让你越过无限循环。

2022-06-12