cle*_*tus 19
您使用哈希表来存储当前发现的密钥(访问O(1)),然后循环遍历该数组.如果一个字符在哈希表中,则将其丢弃.如果没有将它添加到哈希表和结果字符串中.
总体而言:O(n)时间(和空间).
天真的解决方案是在处理每个字符时搜索字符是结果字符串.那个O(n 2).
在Python 中
>>> ''.join(set("aaaabbbccdbdbcd"))
'acbd'
Run Code Online (Sandbox Code Playgroud)
如果订单需要保留
>>> q="aaaabbbccdbdbcd" # this one is not
>>> ''.join(sorted(set(q),key=q.index)) # so efficient
'abcd'
Run Code Online (Sandbox Code Playgroud)
或者
>>> S=set()
>>> res=""
>>> for c in "aaaabbbccdbdbcd":
... if c not in S:
... res+=c
... S.add(c)
...
>>> res
'abcd'
Run Code Online (Sandbox Code Playgroud)
或者
>>> S=set()
>>> L=[]
>>> for c in "aaaabbbccdbdbcd":
... if c not in S:
... L.append(c)
... S.add(c)
...
>>> ''.join(L)
'abcd'
Run Code Online (Sandbox Code Playgroud)
在python3.1中
>>> from collections import OrderedDict
>>> ''.join(list(OrderedDict((c,0) for c in "aaaabbbccdbdbcd").keys()))
'abcd'
Run Code Online (Sandbox Code Playgroud)