[英]while loop keep timing out, can't figure out why(Hackerrank problem)
我正在 Hackerrank 上做重復字符串問題,我的代碼不會通過所有情況。 我的代碼看起來是正確的,但是當取一個大整數時它會超時
我嘗試使用不同的 for 循環,但我似乎無法弄清楚,我對編碼有些陌生。 我嘗試做一個 if 語句,說如果 s 等於 'a' 然后計數等於 n,但這並不能幫助它通過所有測試用例。 我很確定如果您需要查看repeatStr 問題,您可以在谷歌上搜索它。
從我放的代碼中,我希望計數等於 n。
function repeatedString(s, n) {
let count = 0
let subStr = ''
while (subStr.length <= n) { //it times out
for (let i = 0; i < s.length; i++){
let element = s[i]
if (element) {
subStr += element
}
}
}
for (let j = 0; j < subStr.length - 1; j++){
let element = subStr[j]
if (element === 'a') {
count++
}
}
return count
}
repeatedString('a', 100000000)
我想這就是挑戰: https : //www.hackerrank.com/challenges/repeated-string/problem
主要問題是while
循環和for
循環。
while
循環檢查string.length <= n
, for
循環檢查i < n
並增加 n。
當i = n
時 for 循環將中斷,因此當subStr.length == n
。 但是,while 條件不會中斷,因為substr.length 仍然等於 n
我建議將所有內容都保留在一個循環中,因為 while 或 for 是多余的(您只需要一個循環)。
// replace the while and for loop with this
let i = 0
while (subStr.length <= n) {
let element = s[i]
if (element) {
subStr += element
}
i++;
}
最后,關於如何優化此問題的另一條評論:您可以將這個問題視為除法解決方案,或者您可以將給定長度的字符串輸入多少次,而不是構建整個字符串列表並進行計數。 你知道你的字符串中有X
次這個字母。 如果你知道你可以在他們給你的長度中輸入這個字符串的長度Y
倍,你只需要執行 X*Y 來獲得字符串中a
的數量。 當然,您必須使用除法的余數,因為輸入長度的項目數不是輸入數字,而是分數
我也不能添加評論,但是
if (element)
是驗證element
是否未定義的斷言,當您在 JS 中訪問越界數組時就是這種情況
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.