Существует простой, но не обязательно очевидный способ проверить, является ли строка b
вращением строки a
.Убедитесь, что длины совпадают и удваиваются a
.Если b
является подстрокой a + a
, у вас есть вращение:
def rotation(a, b):
return len(a) == len(b) and b in a + a
Это стоит доказать себе вручную, например, проверить вращения hello
в hellohello
.
Что касается вашего кода, я не понимаю, как вложенные циклы или рекурсия являются полезными механизмами для решения проблемы.С одной стороны, нет базового случая, поэтому стек дует.Вам понадобится параметр индекса, чтобы отслеживать, сколько вращений было выполнено.
Наивный, грубый подход заключается в сравнении каждого возможного вращения b
с a
, пока вы не найдете решение или не исчерпаете все возможные вращения:
def rot(str1, str2):
if len(str1) == len(str2):
for i in range(len(str1)):
str2 = str2[-1] + str2[:-1]
if str2 == str1:
return True
return False
Времясложность для первого решения является линейной, а для второго - экспоненциальной.
Попробуйте!