擅长:python、mysql、java
<p>绝对不是线性的。尝试使用包含大量回文但不是回文的输入:</p>
<pre><code>>>> timeit.timeit('longestp(x)', 'x="a"*100000+"b"', globals=globals(), number=1)
5.5123205203562975
>>> timeit.timeit('longestp(x)', 'x="a"*10000+"b"', globals=globals(), number=1)
0.08460151217877865
</code></pre>
<p>切片和<code>s == s[::-1]</code>比解释过的Python代码有更好的常量因子,您需要确保内部循环不会过早地<code>break</code>。你试图判断时间的复杂性可能已经被时间的影响所抛弃。在</p>
<hr/>
<p>我也不认为是O(n^3)。由于<code>break</code>条件,嵌套循环的交互方式与您的直觉预期不符。内环在算法的整个过程中执行O(n)次迭代,因为在有限的迭代次数之后,<code>len(maxp)</code>会增长,或者循环{<cd2>}s。在我看来,这个算法是最差的O(n^2)。在</p>