28. 找出字符串中第一个匹配项的下标:
代码思路
KMP算法
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
n = len(needle)
m = len(haystack)
#构造next数组
next = [0]
k = 0
for i in range(1,n):
while k > 0 and needle[k] != needle[i]:
k = next[k-1];
if needle[k] == needle[i]:
k += 1
next.append(k)
#主串位置判断
j = 0
for i in range(m):
while j > 0 and haystack[i] != needle[j]:
j = next[j-1]
if haystack[i] == needle[j]:
j += 1
if j == n:
return i-j+1
return -1