簡體   English   中英

while 循環一直超時,不知道為什么(Hackerrank 問題)

[英]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 <= nfor循環檢查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的數量。 當然,您必須使用除法的余數,因為輸入長度的項目數不是輸入數字,而是分數


我也不能添加評論,但是

  1. 這個問題被標記為 javascript 和
  2. if (element)是驗證element是否未定義的斷言,當您在 JS 中訪問越界數組時就是這種情況

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM