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

Javascript Hackerrank重复字符串无限循环问题,javascript,algorithm,data-structures,Javascript,Algorithm,Data Structures,我正在解决计算给定字符串中'a's的数量的hackerrank问题 我的解决方案是将字符串存储在模式变量中。虽然模式的长度小于n,但它只会将字符串添加到自身中。然后我将循环遍历模式,并在字符串中添加'a's的数量 当n1000000时,此解决方案工作正常。但是再加上一个0,当n=10000000时,我在hackerrank中得到一个RangeError,因为它太长了 有没有办法解决这个范围错误问题?我知道还有其他方法可以解决这个问题,但我只想知道如何编辑我的代码,使其通过hackerrank测试

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

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

n
1000000
时,此解决方案工作正常。但是再加上一个0,当
n
=
10000000
时,我在hackerrank中得到一个
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;
}
函数repeatedString(s,n){
设模式=s;
让计数=0;
while(pattern.length
您可以在这方面进行计算,而不是在字符串连接和循环上消耗内存和计算

a
的总数是
s
a
的数量乘以总长度不超过
n
s
的重复次数,再加上填充
n
s
的剩余部分(左子串)

例如,使用输入

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, 0, n mod len(s)))
函数repeatedString(s,n){
常量numberOfA=str=>str.split(“”).filter(char=>char===a').length
返回(
编号*数学楼层(n/s.长度)+
编号(s.子串(0,n%s.长度))
)
}
console.log(repeatedString('aba',10))

log(repeatedString('a',10000000000))
重复字符串的php解决方案

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

构建字符串本身然后在其上循环不是很有效。JS对字符串的大小有一个上限,您可以超过这个上限。你需要改变你的方法