(python刷題)leetcode 第28題:實現 strStr()

題目描述:
在這裏插入圖片描述

解題思路:
使用樸素算法進行解題。即使用兩個指針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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章