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

为何我的滑动窗口解法无法高效通过最长回文子串测试?

你的滑动窗口解法效率不足的核心原因

1. 回文判断的低效实现是最大瓶颈

你写的isPalindrome方法用StringBuffer反转字符串再做相等比较,这会带来双重致命开销:

  • 时间层面:反转和字符串比较都要遍历整个窗口长度,时间复杂度为O(L)(L为当前窗口的长度)。结合外层遍历所有窗口的O(n²)次数,整体时间复杂度直接飙升至O(n³)——这就是长输入超时的核心原因。比如输入长度为1000时,总操作量会突破5亿次,完全超出LeetCode的时间限制。
  • 空间层面:每次判断都会创建新的StringBuffer和反转后的字符串对象,大量临时对象会触发频繁的垃圾回收,进一步拖慢运行速度。

2. 不必要的子串截取放大了开销

每次检查窗口时你都调用s.substring(...)生成新字符串,这个操作需要复制原字符串的对应字符段,时间开销同样是O(L),相当于给每个回文判断多增加了一倍的O(L)操作,让整体耗时雪上加霜。实际上完全可以直接在原字符串上通过索引判断回文,不需要截取子串。

3. 窗口遍历逻辑的冗余(次要原因)

你的循环通过重置i=0切换更小窗口的逻辑本身是合理的,但每次切换窗口后i从0重新遍历,结合前面的高开销判断,会让O(n³)的复杂度问题更突出。比如输入长度为1000时,仅窗口遍历的次数就有50万次,再叠加每次的O(L)操作,整体耗时必然超标。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:53:22