这是确定字符串是否具有所有唯一字符的算法。时间的复杂度是多少?
def unique(s):
d = []
for c in s:
if c not in d:
d.append(c)
else:
return False
return True
这里看起来只有一个for循环,所以应该是O(n),但是,这行
if c not in d:
此行是否也花费O(n)时间,如果这样,此算法的时间复杂度为O(n ^ 2)吗?
答案 0 :(得分:2)
您的直觉是正确的,此算法为 O(n 2 )。 documentation for list指定in
是 O(n)操作。在最坏的情况下,当列表中没有目标元素时,将需要访问每个元素。
使用set
而不是列表会增加 O(n)的时间复杂度,因为set
查找将是 O(1)
答案 1 :(得分:1)
利用集合的 O(n)时间复杂度来测试字符串中的所有字符是否唯一的一种简单方法是简单地将字符串序列转换为集合,并查看其长度是否为还是一样:
Date 0 1 2
0 10-1 thing1 None None
1 10-1 thing1 thing1 None
2 10-2 thing2 thing1 None
3 10-3 thing1 thing1 thing2