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对字符串的大小有一个上限,您可以超过这个上限。你需要改变你的方法