Уведомления

Группа в Telegram: @pythonsu

#1 Июль 30, 2015 09:23:33

Andrew22528
Зарегистрирован: 2015-05-17
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Z-функция

Всем привет. Не могли ли вы найти ошибку в коде для нахождения Z-функции строки(Python3).

s = list(input())
n = len(s)
z = [0] * n 
z[0] = n
l = r = 0
i = 1
while i < n:
    if i > r:
        j = 0
        while (j + i < n) and (s[i + j] == s[j]):
            z[i] = j
            j += 1
            l = i
            r = i + j - 1
    else:
        if z[i - l] < r - i + 1:
            z[i] = z[i - l]
        else:
            j = 1
            while j + r < n and s[r + j] == s[r - i + j]:
                z[i] = r - i + j
                l = i
                r = r + j - 1
                j += 1
    i += 1
print(z)

Офлайн

#2 Июль 30, 2015 12:44:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Z-функция

>>> def zfun(s):
...     out = []
...     if not s: return out
...     i, slen = 1, len(s)
...     out.append(slen)
...     while i < slen:
...         left, right = 0, i
...         while right < slen and s[left] == s[right]:
...             left += 1
...             right += 1
...         out.append(left)
...         i += 1
...     return out
... 
>>> zfun('abcdabscabcdabia')
[16, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 1]
>>> zfun('')
[]
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version