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

时间:2019-01-26 06:13:48

标签: python while-loop

这是我对HackerRank挑战的回应

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

<div class="page">
  <div class="main-container">
    <div class="page-header">
      This is a header
    </div>
    <div class="half-containers">
      <div class="img-container">
        <img src='https://i.imgur.com/tqQvuFr.jpg' />
      </div>
    </div>
    <div class="half-containers">
      <div class="img-container">
        <img src='https://i.imgur.com/tqQvuFr.jpg' />
       </div>
    </div>
    <div class="page-footer">
      This is a footer
    </div>
  </div>
</div>

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

然后我需要找到'a'的出现次数,我的函数在小整数上可以正常工作,但是对于该问题的测试用例,它们使用1000000000000并且所有超时,甚至在我的笔记本电脑上。

是否有更有效,更省资源的方式?

1 个答案:

答案 0 :(得分:4)

您可以做一些数学运算而不是循环:

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)慢30%。