[Leetcode]28. 實現strStr()
阿新 • • 發佈:2019-04-29
和我 處理 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() 定義相符。
我的方法:
該題較為簡單,思路如下:
- 考慮needle不在haystack中的情況,直接返回-1。
- 主流程通過遍歷haystack,比對haystack[i:i+ll]和needle是否相等,如果相等則直接返回位置。
- 考慮輸入輸出均為空的情況,此時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()