classSolution(object): defgetnext(self,next,s): j=0 next[0]=0 for i inrange(1,len(s)): while j>0and s[i]!=s[j]: j=next[j-1] if s[i]==s[j]: j+=1 next[i]=j returnnext defkmp(self,haystack,needle): next=[0]*len(neddle) next=self.getnext(next,needle) j=0 for i inrange(len(haystack)): while j>0and haystack[i]!=needle[j]: j=next[j-1] if haystack[i]==needle[j]: j+=1 if j==len(needle): return i-len(needle)+1 return -1