https://leetcode.com/problems/implement-strstr/
用KMP 算法解最好。很难理解,知道就好。interview不会问到这个程度?
ref:
http://wiki.jikexueyuan.com/project/kmp-algorithm/define.html
参考这个code
http://www.geeksforgeeks.org/searching-for-patterns-set-1-naive-pattern-searching/
暴力法
http://codesays.com/2014/solution-to-implement-strstr-by-leetcode/
class Solution(object):
def computeLPS(self, pat, M, lps):
len = 0
lps[0]
i = 1
while i < M:
if pat[i] == pat[len]:
len += 1
lps[i] = len
i += 1
else:
if len != 0:
len = lps[len - 1] # recursive
else:
lps[i] = 0
i += 1
def strStr(self, haystack, needle):
"""
:type haystack: str
:type needle: str
:rtype: int
"""
if not needle:
return 0
len_pat = len(needle)
len_txt = len(haystack)
lps = [0] * len_pat
self.computeLPS(needle, len_pat, lps)
i, j = 0, 0
while i < len_txt:
if needle[j] == haystack[i]:
i += 1
j += 1
if j == len_pat:
return i - len_pat
elif i < len_txt and needle[j] != haystack[i]:
if j!=0 :
j = lps[j - 1]
else:
i +=1
return -1