代码之家  ›  专栏  ›  技术社区  ›  Ari

我的简单while循环将我的计算机挂在较大的输入上

  •  0
  • Ari  · 技术社区  · 5 年前

    这是我对黑客攻击的回应

    https://www.hackerrank.com/challenges/repeated-string

    def repeatedString(s, n):
       string = ''
       count = 0
    
       while len(string) < n:
          for letter in s:
             if len(string) != n:
                string += letter
                if letter == 'a':
                   count += 1
       return count
    
    print(repeatedString('aba', 10))
    >> 7 # works!
    

    “s”是字符串输入,例如“abc”,理论上永远重复。n'是我需要使用该无限字符串的字符数,例如,如果n=10,则为'abcabca'

    然后我需要找到“a”的出现次数,我的函数在小整数上可以很好地工作,但是对于问题中的测试用例,它们使用10000000000,并且所有的时间都超时了,即使是在我的笔记本上。

    有没有一种更有效、资源密集度更低的方法来做到这一点?

    1 回复  |  直到 5 年前
        1
  •  4
  •   iz_    5 年前

    你可以做一些数学而不是循环:

    def repeatedString(s, n):
       q, r = divmod(n, len(s))
       return s.count('a') * q + s[:r].count('a')
    

    价值 n 这个解决方案无关紧要。 repeatedString('abca', 100000000000000000000000) 运行速度仅比 repeatedString('abca', 10) .