Минимальная подстрока окна - PullRequest
0 голосов
/ 11 февраля 2019

Учитывая строку S и строку T, найдите минимальное окно в S, которое будет содержать все символы в T со сложностью O (n).

Пример:

Input: S = "ADOBECODEBANC", T = "ABC"  
Output: "BANC"

Примечание:

  • Если в S нет такого окна, которое охватывало бы все символы в T, верните пустую строку "".
  • Если есть такое окно, вы гарантированно, что всегда будет только одно уникальное минимальное окно в S.

Я написал ниже код Python, который находит всеокно в основной строке "s", где находятся все символы строки шаблона "t".Но я не могу минимизировать это окно и поддерживать O (n) временной сложности.Поэтому, пожалуйста, помогите мне в приведенном ниже коде Python: -

def min_window_size(s,t):
begin=0
end=0
dict={}
list=[]
count=0
len_t=len(t)
#Creating character counts in string "t" to be searched
for c in t:
    dict.setdefault(c,0)
    dict[c]+=1
print(s+" "+t)
#Iterating over main string "s" where minimum window need to be checked
for i in range (len(s)):
    if s[i] in dict:
        #Increasing the counter whenever character from "t" is found in "s"
        count+=1
    end+=1
     #As soon as count equal to length of string "t" it means we have found all characters of "t" in "s"
    if count==len_t:
        #Appending the found window into empty list
        list.append(s[begin:end])
        index=begin
        #Increase begin counter to forward so that next window after first can be searched
        begin=end
        #Reset counter so that we can continue to look for new window
        count=0
print list
if list==[]:
    return " "
else:
   return (min(list,key=len))

Это упражнение является частью моего учебного процесса и содержит вопросы ниже

  1. Как я могу изменить свой код, чтобы я могтакже начать сворачивать окно, в котором присутствуют все символы строки "t"?
  2. В моем коде я думал проверить отдельное найденное окно и затем попытаться уменьшить его, перемещая указатель начала, но я несмог придумать код sudo или фактический код Python для того же самого в моей текущей программе.
  3. Чтобы изучить и сделать мою логику робастной, какой подход мне выбрать?Когда я обычно застреваю, я пытаюсь найти решение?Это правильный подход?Любая помощь или направление в этом приветствуется.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...