实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:
输入: haystack = “hello”, needle = “ll”
输出: 2
示例 2:
输入: haystack = “aaaaa”, needle = “bba”
输出: -1
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-strstr
代码
# next[i]=max{k | 1<=k<i s[0...k-1]=s[i-k,...,i-1]}
def get_next(s):
n = len(s)
nxt = [0]*(n+1)
nxt[0]=-1
nxt[1]=0
# i 表示待求的next数组的下标
for i in range(2,n+1):
j = nxt[i-1]
# 如果没有 s[i-1]!=s[j], 且没有到达边界(j==-1) 则退回 j=nxt[j]
while j!=-1 and s[i-1]!=s[j]:
j = nxt[j]
nxt[i] = j+1
return nxt
def strStr(haystack, needle):
i=0
j=0
nxt = get_next(needle)
while i<len(haystack) and j<len(needle):
# 如果匹配 或者 没有长度大于0的公共前后缀 则i j都前进一步 否则 j=next[j]
if j==-1 or haystack[i]==needle[j]:
i+=1
j+=1
else:
j = nxt[j]
return j==len(needle)