Я работаю над проблемой, чтобы найти полностью повторяющуюся кратчайшую подстроку заданной строки, а если нет совпадения, верните длину строки.строка сравнение сложность времени для консультации
Моя основная идея узнана из ответа Юлианы здесь (Check if string is repetition of an unknown substring), я переписываю алгоритм в Python 2.7.
Я думаю, что это должно быть O(n^2)
, но не уверен, что я прав, вот моя мысль - так как во внешнем цикле он пытается запустить символ начала итерации с помощью - это O(n)
внешний цикл, а в внутренний цикл, он сравнивает характер один за другим - это O(n)
внутреннее сравнение. Итак, общая временная сложность - O(n^2)
? Если я не прав, пожалуйста, помогите исправить. Если я прав, пожалуйста, помогите подтвердить. :)
Входной и выходной пример
catcatcat => 3
aaaaaa=>1
aaaaaba = > 7
Мой код,
def rorate_solution(word):
for i in range(1, len(word)//2 + 1):
j = i
k = 0
while k < len(word):
if word[j] != word[k]:
break
j+=1
if j == len(word):
j = 0
k+=1
else:
return i
return len(word)
if __name__ == "__main__":
print rorate_solution('catcatcat')
print rorate_solution('catcatcatdog')
print rorate_solution('abaaba')
print rorate_solution('aaaaab')
print rorate_solution('aaaaaa')
('rorate' не звонит слишком много звонков - рассмотрите _shift_.) Что касается анализа временной сложности, укажите, рассматриваете ли вы сложность представленного алгоритма/_procedure_ или проблему (самый быстрый алгоритм). – greybeard
(Название этого сообщения ужасно. Я сожалею, что не нашел «официального» имени для (участников) этой проблемы. _Periodic string_, похоже, является установленным термином для строк, которые являются повторениями одной меньшей строки (Я называю это _base_ для этого комментария), но даже значение _period_ в этом контексте, по-видимому, отличается между количеством повторений (не обязательно наибольшим) и повторяющейся строкой (не обязательно кратчайшей). Я даже не уверен все согласны с тем, что строка обязательно начинается и заканчивается _base_. Еще одна строка diction string a _power_ of _base_. – greybeard
Разве это не дубликат с http://stackoverflow.com/questions/6021274/finding-shortest-repeating-cycle- in-word? –