简体   繁体   中英

Is this function O(n^3)?

Was working on a leetcode problem and received feedback that the following block of code is of O(n^3) time complexity. Can someone help explain to me how this is so? I count two loops which led me to believe this was O(n^2).

var longestPalindrome = function(s) {
    let maxString = "";
    let originalString = s;
    let reversedString = s.split("").reverse().join("");
    
    for (let i = 0; i < s.length; i++){
        for (let j = i+1; j < s.length+1; j++){
            if (i<j){
                let iteratedSubstring = originalString.substring(i,j)
                     if (reversedString.includes(iteratedSubstring) && (iteratedSubstring === iteratedSubstring.split("").reverse().join("")) ){
                     iteratedSubstring.length > maxString.length ? maxString =  iteratedSubstring: maxString = maxString
                 }
            }
        }
    }
    return maxString
}

The if block is executed O(²) times, but the body of that block is not O(1):

  • originalString.substring(i,j) may have O(−) time complexity (depending on implementation), so that would average to a time complexity of O(). See also: Is Javascript substring virtual?
  • reversedString.includes(iteratedSubstring) has O() time complexity
  • iteratedSubstring.split("") has O() time complexity
  • .reverse() has O() time complexity
  • .join("") has O() time complexity

So there are several reasons why that if block has a time complexity of O(n), giving an overall time complexity of O(³)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM