алгоритм z-функции
Вот пример поиска z-функции:
Пусть s=«abacaba»(вводится)
z[0]= 0 — по определениюz[1]= 0 — ищем длину наидл. общего префикса у abacaba иbacaba:bacabaначинается сb,поэтомуz[1]=0z[2]= 1 — ищем ДНОП уabacabaиacabaz[3]= 0 — ищем ДНОП уabacabaиcabaz[4]= 3 — ищем ДНОП уabacabaиaba;abacabaz[5]= 0 — ищем ДНОП уabacabaиbaz[6]= 1 — ищем ДНОП уabacabaиaгде ДНОП-длина наибольшего общего префиксаz = input() y=list(z) k=0 for i in range(0,len(y)): for x in range(1,len(y)): x=0 if y[i+x]==y[x]: k+=1 x+=1 print(k)
Ответы (1 шт):
Автор решения: splash58
→ Ссылка
def z(string, idx):
if not idx : return 0
i=0
for a,b in zip(string, string[idx:]):
if not a == b :
break
i+=1
return i
for i in range(len('abacaba')) :
print(z('abacaba', i))
# 0 0 1 0 3 0 1