Я хочу написать функцию: например, sequential_research (M, L), которая, используя принцип последовательного исследования в списке суффиксов L, возвращает позицию первого кортежа, так что M является префиксом суффикса этого кортежа, если он существует; в противном случае функция возвращает None.
я пробую этот метод, но только для одной строки, а не для списка строк
def get_prefix_arr(pattern, b):
prefix_arr = [0] * b
n = 0
m = 1
while m != b:
if pattern[m] == pattern[n]:
n += 1
prefix_arr[m] = n
m += 1
elif n != 0:
n = prefix_arr[n - 1]
else:
prefix_arr[m] = 0
m += 1
return prefix_arr
def KMP_String(pattern, text):
a = len(text)
b = len(pattern)
prefix_arr = get_prefix_arr(pattern, b)
initial_point = []
m = 0
n = 0
while m != a:
if text[m] == pattern[n]:
m += 1
n += 1
else:
n = prefix_arr[n - 1]
if n == b:
initial_point.append(m - n)
n = prefix_arr[n - 1]
elif n == 0:
m += 1
return initial_point
string = "TATCTAGCTA"
pat = "CTA"
initial_index = KMP_String(pat, string)
for i in initial_index:
print("{}: {}".format(i, string[i:]))