Неверные значения хеша в алгоритме Рабина Карпа
Раньше были вопросы, связанные с этой темой, но они не устранили мое сомнение в том, что мой код не соответствует шаблону в тексте, кроме случаев, когда шаблон находится в начале текста. Я получаю хеш-значение для шаблона, встречающегося в тексте, отличное от значения, которое я вычислил в начале моего кода. Например: text- abcabcabcabcabc pattern- abc Я получаю счет как 1 вместо 5
txt=input()
ptrn=input()
d=256
q=pow(2,30) #mod
h=0 #hash for pattern
ht=0 #hash for text
count=0
l=1
#calculating hash value for pattern
for i in ptrn:
h=(h+ord(i)*pow(d,l,q))%q
l+=1
l=1
#checking for first len(pattern) characters in text
for i in range(len(ptrn)):
ht=(ht+ord(txt[i])*pow(d,l,q))%q
l+=1
if(ht==h):
count+=1
#moving the window for all substrings
for i in range(len(ptrn),len(txt)):
ht=(ht/d-ord(txt[i-len(ptrn)])+ord(txt[i])*pow(d,len(ptrn),q))%q
if(ht==h):
count+=1
print(count)