def kmp(s, t):
mark = func(t)
print('mark is \n{}'.format(mark))
i, j = 0, 0
while j < len(s):
print('i is {}, j is {}'.format(i, j))
if s[i: j + 1] == t[: j - i + 1]:
# 长度加1
j += 1
else:
if i == j:
i = j = i+1
else:
# 向右移动
i += mark[j - i - 1]
if j - i == len(t):
return True
return False
def func(s):
res = [0 for _ in range(len(s))]
# i 代指的是长度
for i in range(1, len(s) + 1):
cur = 0
tmp = s[:i]
# j 也代指的是长度,但是这个长度是指部分串的部分长度
for j in range(1, i):
if tmp[:j] == tmp[-j:] and j > cur:
cur = j
res[i - 1] = i - cur
return res
# print(func('abcdabd'))
print(kmp('bbc abcdab abcdabcdabde', 'abcdabd'))