检查字符串是否只有唯一字符的时间复杂度

时间:2018-10-22 00:57:20

标签: python-3.x time-complexity

这是确定字符串是否具有所有唯一字符的算法。时间的复杂度是多少?

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)吗?

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