有人可以解释一下超出程序的空间复杂性,为什么会这样?
def is_pal_per(str):
s = [i for i in str]
nums = [0] * 129
for i in s:
nums[ord(i)] += 1
count = 0
for i in nums:
if i != 0 and i / 2 == 0:
count += 1
print count
if count > 1:
return False
else:
return True
实际上,我对这行代码很感兴趣。它如何影响上述程序的空间复杂性?
s = [i for i in str]
nums = [0] * 129
答案 0 :(得分:0)
您找到了仅分配内存的两行:
s = [i for i in str]
nums = [0] * 129
第一个与len(str)
线性增长,第二个是常数。因此,函数的空间复杂度为O(N),N = str
的长度。
答案 1 :(得分:0)
我不清楚你在哪里遇到麻烦。 s 只是 str 中单个字符的列表。空间消耗 len(s)。
nums 是一个固定的大小,由 O(N)术语支配。
这是您编写的代码,还是已经交给您了?编程风格高度不“Pythonic”。
至于你的代码,从这个崩溃开始:
count = 0
for char in str:
val = ord[char] + 1
if abs(val) == 1:
count += 1
print count
return count == 0
首先,我更换了您的单字母变量( s => char ; i => val )。然后我删除了大多数的中间步骤,留下一对来帮助您阅读代码。最后,我使用了一个简单的布尔值来返回,而不是原始的复杂语句。
我不使用Python的计数方法 - 这会进一步缩短功能。顺便说一下,你有打印统一值的计数,还是只需要布尔返回?如果它只是返回值,你可以使它更短。