You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

这段求解最长回文子串的JS代码时间复杂度是O(n³)吗?

最长回文子串代码时间复杂度O(n³)的原因解释

你给出的代码如下:

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
}

具体复杂度推导如下:

  1. 两层循环的时间量级为O(n²):两层循环的作用是枚举字符串所有可能的子串,当原串长度为n时,子串总数量为n*(n+1)/2,确实是O(n²)量级。
  2. 循环内部存在隐藏的*O(n)*时间操作:
    • 回文判断逻辑iteratedSubstring === iteratedSubstring.split("").reverse().join("")需要遍历子串的每一个字符,时间开销和子串长度成正比,最坏情况下子串长度等于原串长度n,这步的时间开销为O(n)。
    • 额外的reversedString.includes(iteratedSubstring)是冗余判断,JavaScript内置的字符串includes方法最坏时间复杂度同样为O(n),完全可以删除,能降低常数时间开销。
  3. 总时间复杂度计算:总复杂度等于循环层数的复杂度乘循环内部操作的复杂度,即O(n²) * O(n) = O(n³)。

内容的提问来源于stack exchange,提问作者Divine Ogbuefi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:36:05