Я пытаюсь реализовать пример поиска самой короткой подстроки данной строки 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)
. Помощь приветствуется.