题目描述:
解题思路:
使用朴素算法进行解题。即使用两个指针j,i,分别指向haystack和needle,初始化i=j=0,然后判断needle[i]是否等于haystack[j],如果等于,那么继续判断它们的下一个字符是否匹配,如果中途匹配失败,那么将j往后移一步,i重新置0,重复以上过程;如果needle的所有字符都匹配成功了,直接返回匹配成功的haystack的位置即可;如果j遍历完了haystack都没匹配成功,那么返回-1。
复杂度分析:
由于j处于每一个位置,都有可能需要遍历一次needle,最坏的情况是j需要遍历完haystack才得到结论,此时最坏时间复杂度为o(m*n),最后时间复杂度为o(n),其中m为haystack的长度,n为needle的长度。
空间复杂度为o(1)。
python代码:
class Solution(object):
def strStr(self, haystack, needle):
"""
:type haystack: str
:type needle: str
:rtype: int
"""
if needle == "":
return 0
if needle is None:
return -1
for j in range(len(haystack) - len(needle) + 1):
i = 0
while i < len(needle):
if needle[i] == haystack[j]:
i += 1
j += 1
else:
break
if i == len(needle):
return j - len(needle)
return -1