题目
实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
当然面试不这么写了哈哈哈,击败99%
def strStr(self, haystack: str, needle: str) -> int:
return haystack.find(needle) if needle else 0
暴力法
三种情况
- 如果是,且不是第一次匹配到,则curr+1
- 如果是,且是第一次匹配到,则pre等于现在的索引,并且curr+1
- 否则,重新初始化参数,并且让i退回到第一次索引的下一个
时间复杂度O(MN)击败50%
def strStr(self, haystack: str, needle: str) -> int:
len_needle = len(needle)
if not len_needle: return 0
pre = -1 # 子串第一次在主串匹配的位置
curr = 0 # 子串现在子串中检索的位置
i = 0
while i<len(haystack):
if haystack[i] == needle[curr] and pre!=-1:
curr+=1
if curr == len_needle:
return pre
elif haystack[i] == needle[curr]:
pre = i
curr+=1
if curr == len_needle:
return pre
# elif haystack[i] != needle[curr] and haystack[i] == needle[0]:
# pre = i
# curr = 0
else:
i = i - curr
pre = -1
curr = 0
i+=1
return -1
另一种暴力法
def strStr(self, haystack: str, needle: str) -> int:
c=-1
for i in range(len(haystack)-len(needle)+1):
if haystack[i:i+len(needle)]==needle:
c=i
break
return c