class Solution:
def strStr(self, haystack: str, needle: str) -> int:
def kmp_nextval(needle):
nextval=[]
i,j=0,-1
nextval.append(j)
while len(nextval)<len(needle):
if j==-1 or needle[i]==needle[j]:
i,j=i+1,j+1
nextval.append(nextval[j] if needle[i]==needle[j] else j)
else:
j=nextval[j]
return nextval
nextval=kmp_nextval(needle)
i,j=0,0
while j<len(needle) and i<len(haystack):
if j==-1 or haystack[i]==needle[j]:
i,j=i+1,j+1
else:
j=nextval[j]
if j==len(needle):
return i-j
else:
return -1
相关文章
- 11-19leetcode 215. 数组中的第K个最大元素 实现最小堆 随机partition
- 11-19Leetcode[300.实现Trie]-前缀树
- 11-19leetcode 字典树 每日一题 2021.5.16 208. 实现 Trie (前缀树)(字典树)
- 11-19leetcode208. 实现 Trie (前缀树)
- 11-19Leetcode 104. 二叉树的最大深度 解题思路及C++实现
- 11-19[LeetCode] 28. Implement strStr() ☆
- 11-19[leetcode 27]Implement strStr()
- 11-19用KMP算法实现strStr()
- 11-19LeetCode Implement strStr()(Sunday算法)
- 11-19【leetcode】Implement strStr()