微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Hackerrank重复字符串无限循环问题

如何解决Hackerrank重复字符串无限循环问题

我正在解决this的hackerrank问题,用于计算给定字符串中'a'数量

我的解决方案是将字符串存储在pattern变量中。尽管pattern的长度小于n,但它只会将字符串添加到自身中。然后,我将遍历pattern并在字符串中添加'a'数量

n 1000000时,此解决方案可以正常工作。但是再加上一个0,当n = 10000000时,我在hackerrank中得到的字符串是RangeError,因为它太长了。

有没有办法解决这个RangeError问题?我知道还有其他方法可以解决此问题,但是我只想知道如何编辑代码以使其通过hackerrank测试。

function repeatedString(s,n) {
  let pattern = s;
  let count = 0;
  while (pattern.length < n) {
    pattern += pattern;
  }
  for (let i = 0; i < n; i++) {
    if (pattern[i] === 'a') {
      count++;
    }
  }
  return count;
}

解决方法

您可以对此进行数学运算,而不是在字符串连接和循环上消耗内存和计算

a的总数将是as的数目乘以重复的s的总长度不超过n的数目,加上s的其余部分(左子字符串),它们填充n

例如,使用输入

s = 'aba'
n = 10

可以在下面直观地看到

 aba  aba  aba   a(ba)
|______3______| |1|

aba的前3个重复项等于n除以s的长度(即10/3 = 3)

剩余的a(将bc跳到与n相等)是s的结果,其长度等于n的余数除以长度s(即10%3 = 1)

再加上其中两个,我们就会得出结果

numberOfA(s) * (n div len(s)) + numberOfA(substr(s,n mod len(s)))

function repeatedString(s,n) {
  const numberOfA = str => str.split('').filter(char => char === 'a').length
  return (
    numberOfA(s) * Math.floor(n / s.length) +
    numberOfA(s.substring(0,n % s.length))
  )
}

console.log(repeatedString('aba',10))
console.log(repeatedString('a',1000000000000))

,

php 针对重复字符串的解决方案

    function repeatedString($s,$n) {
       $len = strlen($s);
       $occurence = substr_count($s,"a");
       $mul = floor ($n / $len);
       $reminder = $n % $len;
       $su = substr($s,$reminder);
       return ($occurence * $mul) + substr_count($su,"a");
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。