LeetCode 探索初級算法-字符串:18 實現 strStr()-2020329

18 實現 strStr()-2020329

題目

實現 strStr() 函數。

給定一個 haystack 字符串和一個 needle 字符串,在 haystack 字符串中找出 needle 字符串出現的第一個位置 (從0開始)。如果不存在,則返回  -1

示例

輸入: haystack = "hello", needle = "ll"
輸出: 2

說明

當 needle 是空字符串時,我們應當返回什麼值呢?這是一個在面試中很好的問題。

對於本題而言,當 needle 是空字符串時我們應當返回 0 。這與C語言的 strstr() 以及 Java的 indexOf() 定義相符。


注意事項

  1. 就是找到子字符串對應的開始索引,沒有找到就返回-1。
  2. 子字符串爲空時就返回0。
  3. 注意是子字符串所有的字母都有要有。

思路一

一個find就完了。

修改經歷:

1. 一次成功。(第一次提交)

  • 執行用時 :40 ms, 在所有 Python3 提交中擊敗了58.80%的用戶
  • 內存消耗 :13.7 MB, 在所有 Python3 提交中擊敗了8.41%的用戶

心得體會:

性能一般,不過真的簡單。

最終代碼展示:

class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        if len(needle) == 0:
            return 0
        return haystack.find(needle)

思路二

如果可以用find,則這種題毫無意義,因爲太簡單了。試試自己寫的額其他方法,比如雙指針什麼的。

修改經歷:

1. 一次成功。(第一次提交)

  • 執行用時 :56 ms, 在所有 Python3 提交中擊敗了22.66%的用戶
  • 內存消耗 :13.6 MB, 在所有 Python3 提交中擊敗了8.53%的用戶

心得體會:

這題不難。

最終代碼展示:

class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        if len(needle) == 0:
            return 0
        ind = 0
        while len(haystack) - ind >= len(needle):
            if haystack[ind] == needle[0] and haystack[ind:ind+len(needle)] == needle:
                return ind
            else:
                ind += 1
        return -1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章