Я пробовал следующее, но я пробовал строку из 17 символов.Создание палиндромных анаграмм строки длиной до 10^5
string = input()
def permute(xs, low=0):
if low + 1 >= len(xs):
yield xs
else:
for p in permute(xs, low + 1):
yield p
for i in range(low + 1, len(xs)):
xs[low], xs[i] = xs[i], xs[low]
for p in permute(xs, low + 1):
yield p
xs[low], xs[i] = xs[i], xs[low]
for p in permute(list(string)):
mstr = "".join(p)
if mstr == mstr[::-1]:
print("YES")
break
Это на самом деле мое решение для 'Game of Thrones' challenge on hackerrank. Как уменьшить время выполнения и заставить его работать быстро для строк длиной 10^5?
Спасибо.
Вы смотрели в использовании 'itertools'? – jonrsharpe
@jonrsharpe Я пытался реализовать свой собственный метод перестановок, а не использовать встроенный. Я хочу улучшить свои навыки кодирования. :) –
Но вы спрашиваете, как сделать это быстрее - использование встроенных модулей (написанных по большей части на C) будет быстрее, чем ваш собственный код. Кроме того, рекурсия не всегда эффективна при выполнении (хотя это может затруднить сложные проблемы). – jonrsharpe