Пытаясь решить эту проблему HackerRank :
У Лайлы есть строка s строчных английских букв, которые она повторяла бесконечно много раз.
Учитывая целое число, n , найдите и напечатайте число букв а в первых буквах бесконечной строки Лайлы.
Например, если строка s= abcac и n = 10 , подстрока, которую мы рассматриваем, является abcacabcac , первые 10 символов ее бесконечной строки.В подстроке есть 4 вхождений "a".
Я написал:
function repeatedString(s, n) {
s = s.repeat(n);
s = s.slice(0, n);
let array = Array.from(s);
let count = 0;
for (let i = 0; i < array.length; i++) {
let char = array[i];
if (char.match(/[a]/gi)) {
count++;
}
}
return count;
}
console.log(repeatedString("abcac", 10));
Но HackerRank не любит s = s.repeat(n);
, видимо:
![enter image description here](https://i.stack.imgur.com/1D7ca.png)
Яне уверен, как еще генерировать строку подходящей длины для нарезки.s = s.repeat(Infinity)
не работает, а s
- это , а не повторяется бесконечное число раз, когда оно передается в качестве параметра.
Т.е. console.logging, изначально, logs
abcac
В этом случае.
Я также пробовал:
function repeatedString(s, n) {
let j = n;
let newString = "";
while (n > 0) {
newString += s;
n--;
}
newString = newString.slice(0, j);
let count = 0;
let array = Array.from(newString);
for (let i = 0; i < array.length; i++) {
let char = array[i];
if (char.match(/[a]/gi)) {
count++;
}
}
return count;
}
console.log(repeatedString("abcac", 10));
Но это вызвало ошибку тайм-аута.
Любые другие идеи о том, как создать строку допустимой длины для нарезки?
РЕДАКТИРОВАТЬ :
Ограничения:
1 <= | s |<= 100 </p>
1 <= n <= 10 ^ 12 </p>
Для 25% тестовых случаев, n <= 10 ^ 6 </strong>