У меня есть две строки: одно слово и одно скремблирование букв. Я хочу посмотреть, хватит ли этого письма буквами для написания слова. Я придумал алгоритм для этого, но он недостаточно эффективен, и я надеялся, что смогу получить некоторую помощь, чтобы сделать это быстрее.Эффективно проверьте, содержит ли одна строка весь символ другого
Вот что я до сих пор:
s1 = 'hypochondriac'
s2 = 'yqhpwoewnqlchpijcdrxpoa'
temp = list(s1)
for X in s2:
for Y in temp:
if X == Y:
temp.remove(X)
X = '@'
if temp == []:
print('Found ', s1)
У меня есть вопрос, где когда-то X соответствует мне нужно увеличивать X, но я не знаю, как так что я просто взять его из уравнения, сделав его символ. Я попытался использовать break, но он не достигает достаточно большого расстояния, чтобы разбить его на петлю s2. В любом случае, я уверен, что эта двойная идея цикла слишком медленная по сравнению с тем, что будет использовать кто-то с некоторым опытом. Есть идеи?
Спасибо за помощь! Я внес изменения и протестировал каждый из этих подходов, и было только небольшое увеличение производительности. Я думаю, что хиты производительности, которые я вижу, происходят от куда-то менее очевидного для меня. – user1362058
@ user1362058: Вы на Python 2? 'Counter()' на 2.7 немного медленнее при подсчете, что может доминировать над производительностью. Python 3 добавил оптимизацию C для решения этой проблемы. –
@ user1362058: вы должны видеть, что счетчик выигрывает 2,7 для больших строк, так как ваш подход асимптотически медленнее (O (NM) против O (N + M)). –