Оба этих фрагмента кода выполняют одно и то же: проверяют, достаточно ли слов в списке magazine_words
, чтобы составить сообщение, продиктованное словами в списке note_words
. Однако выполнение первого фрагмента кода занимает намного больше времени, что не позволяет ему работать при больших входах. Это почему? Поскольку оба решения используют одиночные циклы for, разве они не должны иметь одинаковую сложность, т. Е. Запускаться примерно одинаково?
Первое решение:
lengths = input().split ()
m = int(lengths[0])
n = int(lengths [1])
magazine_words = input ().split()
note_words = input ().split()
def checkMagazine(m,n,magazine_words,note_words):
flag = "Yes"
for ind in range (n):
if not (note_words[ind] in magazine_words):
flag = "No"
break
else:
magazine_words.remove(note_words[ind])
return flag
print (checkMagazine(m,n,magazine_words,note_words))
Второе решение:
def ransom_note(magazine, ransom):
rc = {} # dict of word: count of that word in the note
for word in ransom:
if word not in rc:
rc[word] = 0
rc[word] += 1
for word in magazine:
if word in rc:
rc[word] -= 1
if rc[word] == 0:
del rc[word]
if not rc:
return True
return False
m, n = map(int, input().strip().split(' '))
magazine = input().strip().split(' ')
ransom = input().strip().split(' ')
answer = ransom_note(magazine, ransom)
if(answer):
print("Yes")
else:
print("No")```