给定一个 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() 定义相符。
题目要求找到haystack中存在needle的第一个位置,如果不存在返回-1。在寻找位置之前,我们需要对所有可能的输入进行分析:
-
如果
haystack和needle都为'',或者haystack不为''但needle为'',则返回0 -
如果
needle不为'',但是haystack为'',则直接返回-1 -
否则,执行以下的操作进行寻找:index
- 首先找到
needle[0]在haystack中所有的索引位置indexs - 然后依次比较
haystack[i: i + l]是否和needle相同,如果相同直接返回此时的索引indexs,否则继续判断indexs中下一个位置 - 如果都没有找到,则返回-1
- 首先找到
AC code
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
if haystack == None or needle == None:
return None
if haystack == '' and needle == '' or needle == '' and haystack != '':
return 0
elif haystack == '' and needle != '':
return -1
l = len(needle)
index = [i for i, c in enumerate(haystack) if c == needle[0]]
flag = -1
for i in index:
if ''.join(haystack[i: i + l]) == needle:
flag = i
break
return flag