1. 程式人生 > >[Leetcode]28. 實現strStr()

[Leetcode]28. 實現strStr()

和我 處理 strong 地方 效果 速度 sel 遍歷 定義

題目描述:

實現 strStr() 函數。

給定一個 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() 定義相符。

我的方法:

該題較為簡單,思路如下:

  1. 考慮needle不在haystack中的情況,直接返回-1。
  2. 主流程通過遍歷haystack,比對haystack[i:i+ll]和needle是否相等,如果相等則直接返回位置。
  3. 考慮輸入輸出均為空的情況,此時for循環不會運行,直接返回0即可。

效果還行:執行用時 : 32 ms, 在Implement strStr()的Python提交中擊敗了78.80% 的用戶。內存消耗 : 12 MB, 在Implement strStr()的Python提交中擊敗了23.08% 的用戶。

class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        # 考慮needle不在haystack中的情況
        if needle not in haystack:
            return -1
        # 主流程:處理一般情況
        ll=len(needle)
        for i in range(len(haystack)):
            if haystack[i:i+ll]==needle:
                return i
        # 考慮輸入輸出均為空的情況
        return 0

別人的方法:

初步的感受是,我的方法應該不是最簡單的方法,畢竟沒花幾分鐘時間來解。別人的方法總有值得借鑒的地方。

果然有更加簡潔的解法,主要是用到了str.find()方法。但其實運行速度和我的方法是一樣的:執行用時 : 32 ms, 在Implement strStr()的Python提交中擊敗了78.80% 的用戶。內存消耗 : 12 MB, 在Implement strStr()的Python提交中擊敗了29.64% 的用戶。

class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        if not needle:
            return 0
        if needle in haystack:
            return haystack.find(needle)
        else:
            return -1

[Leetcode]28. 實現strStr()