Что не так в моем решении для записки о выкупе LeetcodePython

Программы на Python
Anonymous
Что не так в моем решении для записки о выкупе Leetcode

Сообщение Anonymous »

Я работаю над проблемой Leetcode 383. Примечание о выкупе:

Для двух строк ransomNote и Magazine вернуть true if Примечание о выкупе можно составить, используя буквы журнала и false иначе.
Каждое письмо в журнале можно использовать только один раз в заметке о выкупе.

Мой код проходит 98 из 128 тестовых случаев. Я создал два словаря со счетчиками каждого вхождения и написал код для сравнения этих двух счетчиков.
Вот что у меня есть:

Код: Выделить всё

class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
ransomdict = {}
magadict = {}

for i in ransomNote:
if i in ransomdict:
ransomdict[i] +=1
else:
ransomdict[i] = 1

for j in magazine:
if j in magadict:
magadict[j] +=1
else:
magadict[j] = 1

print(ransomdict)
print(magadict)

for k in ransomdict:
if k in magadict:
if magadict[k] >= ransomdict[k]:
return True
else:
return False
Следующий тестовый пример должен возвращать False, но он возвращает True:

Код: Выделить всё

ransomNote = "abb"
magazine = "ab"
Для отладки я напечатал ransomdict и magadict, и очевидно, что подсчеты верны. В чем моя ошибка?
Я знаю, что этот код не оптимизирован; Я просто ищу способ исправить то, чего мне здесь не хватает, и успешно пройти все тестовые случаи.

Подробнее здесь: https://stackoverflow.com/questions/787 ... ransomnote

Вернуться в «Python»