https://leetcode.com/problems/implement-strstr/#/description
class Solution(object):
def kmpTab(self, needle):
nlen = len(needle)
tab = [0]*nlen
j = 0
for i in xrange(1, nlen):
while j>0 and needle[j] != needle[i]:
j = tab[j-1]
if needle[j] == needle[i]:
j = j+1
tab[i] = j
return tab
def strStr(self, haystack, needle):
"""
:type haystack: str
:type needle: str
:rtype: int
"""
tab = self.kmpTab(needle)
hslen = len(haystack)
ndlen = len(needle)
if hslen==0 and ndlen==0: return 0
i=0
j=0
while i<hslen and j<ndlen:
if haystack[i] != needle[j]:
if j>0:
j=tab[j-1]
else:
j=0
i+=1
else:
i+=1
j+=1
if j>=ndlen:
return i-ndlen
return -1
思路:KMP