我正在尝试实现以下示例:查找包含模式s
的给定字符串char
的最短子字符串。我的代码工作正常,但是我的目标是达到O(N)
的时间复杂度,其中N是s
的长度。
这是我的代码;
def shortest_subtstring(s,char):
#smallest substring containing char.use sliding window
start=0
d=defaultdict(int)
minimum=9999
for i in range(len(s)):
d[s[i]]+=1
#check whether all the characters from char has been visited.
while set(char).issubset(set([j for j in d if d[j]>0])):
#if yes, can we make it shorter
length=i-start+1
minimum=min(length,minimum)
if length==minimum:
s1=s[start:i+1]
d[s[start]]-=1
start+=1
return (minimum,s1)
我的问题已经解决;
while set(char).issubset(set([j for j in d if d[j]>0]))
每次我都使用char
的概念检查is.subset
的所有字符串是否都保存在字典中。我可以知道如何在代码中找到此步骤的时间复杂度吗?是否是O(1)
,对于检查元素是否存在于集合中是否正确。否则,时间复杂度将远远大于O(N)
。感谢您的帮助。