【发布时间】:2014-06-11 01:44:08
【问题描述】:
def is_palindrome(s):
if len(s) <= 1:
return True
return s[0] == s[-1] and is_palindrome(s[1:-1])
我的第一个想法是复杂度是 O(n),因为每次递归调用都会删除 2 个字符。
但后来我想到了切片的复杂性。根据https://wiki.python.org/moin/TimeComplexity,获取切片的复杂度为 O(k),其中 k = 切片中的元素数。在is_palindrome 中,k = n - 2,然后 k = n - 4,然后是 n - 6,等等。所以我认为复杂度会是 O(n^2),因为每个调用都有一个(最坏的情况下)O(n ) 切片,有 n 次调用。
哪个是正确的?
【问题讨论】:
标签: python time-complexity slice