class Solution:
def strStr(self, haystack: str, needle: str) -> int:
m = len(haystack)
n = len(needle)
if not needle:
return 0
if not haystack or m < n:
return -1
def helper(pattern):
res = [0] * len(pattern)
i = 1
j = 0
while i < len(pattern):
if pattern[i] == pattern[j]:
res[i] = j + 1
i += 1
j += 1
elif j > 0:
j = res[j-1]
else:
i += 1
return res
suffix_arr = helper(needle)
i = j = 0
while i < m and j < n:
if haystack[i] == needle[j]:
i += 1
j += 1
elif j > 0:
j = suffix_arr[j-1]
else:
i += 1
return i - j if j == n else -1