【发布时间】:2019-07-11 14:57:37
【问题描述】:
试图解决这个HackerRank challenge:
Lilah 有一个字符串,s,由她无限次重复的小写英文字母组成。
给定一个整数 n,找出并打印 Lilah 无限字符串的第一个字母中的字母 a 的数量。
例如,如果字符串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);:
我不确定如何生成适当长度的字符串以从中进行切片。 s = s.repeat(Infinity) 不起作用,并且 s 在作为参数传入时不已经重复了无数次。
即console.logging(s),最初,日志
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
1
对于 25% 的测试用例,n
【问题讨论】:
-
如果 s 包含 "a" 3 次,并且 s 被重复四次以达到长度 n,那么答案是 3 * 4。对于 n= 无穷大,这将是 3 * 无穷大,这将导致无穷大...当然,您必须考虑 s.length % n !== 0,但这并不太复杂。
-
对于第二个 sn-p,我没有收到超时错误。其他人也是这样吗?
-
@Tuneer 导致 HackerRank 出现超时错误,下面的所有答案也是如此。
-
@JonasWilms 在编辑中为 n 添加了约束 -
1 <= n <= 10^12
标签: javascript arrays string