classSolution(object):defstrStr(self, haystack, needle):"""
:type haystack: str
:type needle: str
:rtype: int
"""
sn =len(haystack)
tn =len(needle)next= self.get_next(needle)
i =0
j =0while i < sn and j < tn:if j ==-1or haystack[i]== needle[j]:
i +=1
j +=1else:
j =next[j]if j == tn:return i - tn
return-1defget_next(self, t):
n =len(t)next=[0for _ inrange(n +1)]next[0]=-1
l =-1
r =0while r < n:if l ==-1or t[l]== t[r]:
l +=1
r +=1next[r]= l
else:
l =next[l]returnnext