28 - 实现 strStr() - python

216 阅读1分钟

给定一个 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。在寻找位置之前,我们需要对所有可能的输入进行分析:

  • 如果haystackneedle都为'',或者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