Как ускорить этот код? Python
Есть такой код:
s1 = 'dfgwjkgofdgrghdflsdgdfd'
s2 = 'world'
w = []
for x in s2:
if x in s1:
w.append(x)
s1 = s1.replace(x, '', 1)
print(True if ''.join(w) == s2 else False)
Он проверяет можно ли из букв первого слова собрать второе слово. При этом учитывает количество букв. Например, в данном случае выдаст True. А если s2 заменить на woorld, то выдаст False, так как в s1 всего одна буква o.
Он работает, но CodeWars его не принимает, так как выполнение слишком долгое для огромных строк. Я предполагаю, что можно использовать count вместо replace, но не совсем понимаю логику как это реализовать. А может это возможно с помощью iter, next... В общем, вопрос - как ускорить этот код или написать аналогичный, но более быстрый?
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
from collections import Counter
s1 = 'dfgwjkgofdgrghdflsdgdfd'
s2 = 'world'
print(Counter(s1) >= Counter(s2))
Для Питона до версии 3.10 код придётся изменить:
c1 = Counter(s1)
c2 = Counter(s2)
print(all(c1[k] >= v for k, v in c2.items()))